当前位置:   article > 正文

(C语言课程设计)学生选修课程系统设计_学生选修课系统设计c语言课程设计

学生选修课系统设计c语言课程设计

1、需求分析

系统以菜单方式工作,因而要提供键盘式选择菜单以实现功能选择;由于课程信息要用文件保存,因而要提供文件的输入输出操作;由于要浏览信息,所以要提供显示功能;要实现查询功能,故要提供查找操作。

2、总体设计

整个系统可以设计为信息输入模块、信息查询模块以及信息浏览模块。

3、详细设计

数据结构采用结构体,这里采用课程信息结构体和学生选课信息结构体。
Struct
{
Char courseCode[10]; //课程编号
Char courseName[20]; //课程名称
Char courseType[10]; //课程类别
Int totalPeriod; //总学时
Int classPeriod; //授课学时
Int experiPeriod; //上机学时
Float creditHour; //学分
Int term; //开课学期
}CourseInfo[N]; //课程信息结构体
Struct
{
Int stuNo; //学号;
Char courseCode[10]; //课程编号
}StuCourInfo[N]; //学生选课信息结构体
(1) 信息输入模块
从键盘输入课程信息和学生选课信息,写入文件。(fwrite, fprintf)
(2)信息浏览模块
分屏显示课程信息,每屏10条课程记录,按任意键继续。从文件中读数据(fread,fscanf),然后再显示。
(3)信息查询模块
通过菜单选择查询字段,可以按照课程编号、课程名称、课程性质、开课学期、学分对课程信息文件进行查找,查找算法可以选择基本查找、二分查找等算法。
可以通过菜单选择课程编号,在学生选课信息文件中查询该课程学生选修情况。

4、编程实现

开发环境:Code::Blocks 13.12
说明:为了简化,本程序约定程序运行后,首先就必须先把所有数据输入,之后就不能再输入数据了。输入的数据会以文件的形式出现在和本程序文件同目录的文件夹内。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

/*
    约定程序运行后,首先就必须先把所有数据输入,之后就不能再输入数据了。
*/

struct CourseInfo {
    char courseCode[10];    //课程编号
    char courseName[20];    //课程名称
    char courseType[10];    //课程类别
    int  totalPeriod;       //总学时
    int  classPeriod;       //授课学时
    int  experiPeriod;      //上机学时
    float creditHour;      //学分
    int  term;              //开课学期
};

struct StuCourInfo {
    int stuNo;              //学号;
    char courseCode[10];    //课程编号
};

struct CourseInfo courses[100];
struct StuCourInfo stus[100];

int courseCnt = 0; // 录入的课程数目
int stuCnt = 0;    // 录入的学生选课数目

// 程序入口
void go();

// 打印菜单
void menu();

// 录入数据
void input();

// 浏览课程数据
void browseCourses();

// 查询选课
void getSelectedCourses();

// 查询课程信息
void getCourseInfo();

int main(){
    go();
    return 0;
}

void go(){
    while(true){
        menu();
        printf("请按照菜单提示输入您的操作编号:\n");
        int choice = 0;
        scanf("%d", &choice);
        if(choice == 0){
            printf("您已经退出系统!\n");
            return;
        }else if(choice == 1){
            input();
        }else if(choice == 2){
            browseCourses();
        }else if(choice == 3){
            getCourseInfo();
        }else if(choice == 4){
            getSelectedCourses();
        }else{
            printf("输入错误!\n");
        }
    }
}

void menu(){
    printf("***选课系统***\n");
    printf("1-->录入数据\n");
    printf("2-->浏览课程\n");
    printf("3-->查询课程\n");
    printf("4-->查询选课\n");
    printf("0-->退出\n");
}

void input(){
    printf("11-->录入课程数据\n");
    printf("12-->录入选课数据\n");
    printf("请输入录入您的选择(11/22):\n");
    int choice = 0;
    scanf("%d", &choice);
    int cnt = 0;
    printf("请输入录入数据条数:\n");
    scanf("%d", &cnt);
    if(choice == 11){
        courseCnt = cnt;
        printf("请录入课程信息(格式示例:1 C语言 编程语言 30 20 10 1 1):\n");
        for(int i = 0; i < cnt; i++){
            scanf("%s", &courses[i].courseCode);
            scanf("%s", &courses[i].courseName);
            scanf("%s", &courses[i].courseType);
            scanf("%d", &courses[i].totalPeriod);
            scanf("%d", &courses[i].classPeriod);
            scanf("%d", &courses[i].experiPeriod);
            scanf("%f", &courses[i].creditHour);
            scanf("%d", &courses[i].term);
        }

        FILE * fp=fopen ("course.txt", "w") ; //打开文件
        if(NULL==fp)
        {
            printf ("Failed to open the file !\n");
            exit(0);
        }

        for(int i = 0; i < cnt; i++){
            fputs(courses[i].courseCode, fp);
            fputs(" ", fp);
            fputs(courses[i].courseName, fp);
            fputs(" ", fp);
            fputs(courses[i].courseType, fp);
            fputs(" ", fp);

            char strTotalPeriod[10];
            itoa(courses[i].totalPeriod, strTotalPeriod, 10);
            fputs(strTotalPeriod, fp);
            fputs(" ", fp);

            char strClassPeriod[10];
            itoa(courses[i].classPeriod, strClassPeriod, 10);
            fputs(strClassPeriod, fp);
            fputs(" ", fp);

            char strExperiPeriod[10];
            itoa(courses[i].experiPeriod, strExperiPeriod, 10);
            fputs(strExperiPeriod, fp);
            fputs(" ", fp);

            char strCreditHour[10];
            sprintf(strCreditHour, "%.1f", courses[i].creditHour);
            fputs(strCreditHour, fp);
            fputs(" ", fp);

            char strTerm[10];
            itoa(courses[i].term, strTerm, 10);
            fputs(strTerm, fp);
            fputs("\n", fp);
        }
        fclose(fp); //关闭文件
        printf("数据已经录入完毕!\n");
    }else if(choice == 12){
        stuCnt = cnt;
        printf("请录入选课信息(格式示例:201901 1):\n");
        for(int i = 0; i < cnt; i++){
            scanf("%d", &stus[i].stuNo);
            scanf("%s", &stus[i].courseCode);

        }

        FILE * fp=fopen ("student.txt", "w") ; //打开文件
        if(NULL==fp)
        {
            printf ("Failed to open the file !\n");
            exit(0);
        }

        for(int i = 0; i < cnt; i++){
            char strStuNo[10];
            itoa(stus[i].stuNo, strStuNo, 10);
            fputs(strStuNo, fp);
            fputs(" ", fp);

            fputs(stus[i].courseCode, fp);
            fputs(" ", fp);

            fputs("\n", fp);
        }
        fclose(fp); //关闭文件
        printf("数据已经录入完毕!\n");
    }else{
        printf("输入错误!\n");
    }
    printf("\n");
}

void browseCourses(){
    printf("课程信息如下(每次显示10个,按任意键继续显示):");
    FILE * fp=fopen ("course.txt", "r") ; //打开文件
    if(NULL==fp)
    {
        printf ("Failed to open the file !\n");
        exit(0);
    }

    for(int i = 0; i < courseCnt; i++){
        fscanf(fp, "%s %s %s %d %d %d %f %d\n",
               &courses[i].courseCode,
               &courses[i].courseName,
               &courses[i].courseType,
               &courses[i].totalPeriod,
               &courses[i].classPeriod,
               &courses[i].experiPeriod,
               &courses[i].creditHour,
               &courses[i].term);
    }
    fclose(fp); //关闭文件

    for(int i = 0; i < courseCnt; i++){
        if(i != 0 && (i%10 == 0)){
            printf("请输入任意键,继续显示...\n");
            getchar();
            getchar();
        }
        printf("%s %s %s %d %d %d %f %d\n",
               courses[i].courseCode,
               courses[i].courseName,
               courses[i].courseType,
               courses[i].totalPeriod,
               courses[i].classPeriod,
               courses[i].experiPeriod,
               courses[i].creditHour,
               courses[i].term);
    }
    printf("数据已经全部显示!\n\n");
}

void getSelectedCourses(){
    printf("请输入课程号:\n");
    char classCode[10];
    scanf("%s", classCode);
    printf("选修课程号为%s的学生如下:\n", classCode);
    FILE * fp=fopen ("student.txt", "r") ; //打开文件
    if(NULL==fp)
    {
        printf ("Failed to open the file !\n");
        exit(0);
    }
    for(int i = 0; i < stuCnt; i++){
        fscanf(fp, "%d %s\n", &stus[i].stuNo, &stus[i].courseCode);
    }
    fclose(fp); //关闭文件
    for(int i = 0; i < stuCnt; i++){
        if(strcmp(classCode, stus[i].courseCode) == 0){
            printf("%d\n", stus[i].stuNo);
        }
    }
    printf("数据已经全部显示!\n\n");
}

void getCourseInfo(){
    printf("31-->根据课程编号查询课程\n");
    printf("32-->根据课程名称查询课程\n");
    printf("33-->根据课程类别查询课程\n");
    printf("34-->根据开课学期查询课程\n");
    printf("35-->根据课程学分查询课程\n");

    FILE * fp=fopen ("course.txt", "r") ; //打开文件
    if(NULL==fp)
    {
        printf ("Failed to open the file !\n");
        exit(0);
    }

    for(int i = 0; i < courseCnt; i++){
        fscanf(fp, "%s %s %s %d %d %d %f %d\n",
               &courses[i].courseCode,
               &courses[i].courseName,
               &courses[i].courseType,
               &courses[i].totalPeriod,
               &courses[i].classPeriod,
               &courses[i].experiPeriod,
               &courses[i].creditHour,
               &courses[i].term);
    }
    fclose(fp); //关闭文件

    printf("请输入您的查询条件编号:\n");
    int choice = 0;
    scanf("%d", &choice);
    if(choice == 31){
        printf("请输入课程编号:\n");
        char courseCode[10];
        scanf("%s", courseCode);
        for(int i = 0; i < courseCnt; i++){
            if(strcmp(courseCode, courses[i].courseCode) == 0){
                printf("%s %s %s %d %d %d %f %d\n",
                   courses[i].courseCode,
                   courses[i].courseName,
                   courses[i].courseType,
                   courses[i].totalPeriod,
                   courses[i].classPeriod,
                   courses[i].experiPeriod,
                   courses[i].creditHour,
                   courses[i].term);
            }
        }
        printf("数据已经全部显示!\n");
    }else if(choice == 32){
        printf("请输入课程名称:\n");
        char courseName[10];
        scanf("%s", courseName);
        for(int i = 0; i < courseCnt; i++){
            if(strcmp(courseName, courses[i].courseName) == 0){
                printf("%s %s %s %d %d %d %f %d\n",
                   courses[i].courseCode,
                   courses[i].courseName,
                   courses[i].courseType,
                   courses[i].totalPeriod,
                   courses[i].classPeriod,
                   courses[i].experiPeriod,
                   courses[i].creditHour,
                   courses[i].term);
            }
        }
        printf("数据已经全部显示!\n");
    }else if(choice == 33){
        printf("请输入课程类别:\n");
        char courseType[10];
        scanf("%s", courseType);
        for(int i = 0; i < courseCnt; i++){
            if(strcmp(courseType, courses[i].courseType) == 0){
                printf("%s %s %s %d %d %d %f %d\n",
                   courses[i].courseCode,
                   courses[i].courseName,
                   courses[i].courseType,
                   courses[i].totalPeriod,
                   courses[i].classPeriod,
                   courses[i].experiPeriod,
                   courses[i].creditHour,
                   courses[i].term);
            }
        }
        printf("数据已经全部显示!\n");
    }else if(choice == 34){
        printf("请输入开课学期:\n");
        int term = 0;
        scanf("%d", &term);
        for(int i = 0; i < courseCnt; i++){
            if(term == courses[i].term){
                printf("%s %s %s %d %d %d %f %d\n",
                   courses[i].courseCode,
                   courses[i].courseName,
                   courses[i].courseType,
                   courses[i].totalPeriod,
                   courses[i].classPeriod,
                   courses[i].experiPeriod,
                   courses[i].creditHour,
                   courses[i].term);
            }
        }
        printf("数据已经全部显示!\n");
    }else if(choice == 35){
        printf("请输入学分:\n");
        float creditHour = 0.0;
        scanf("%f", &creditHour);
        for(int i = 0; i < courseCnt; i++){
            if(creditHour == courses[i].creditHour){
                printf("%s %s %s %d %d %d %f %d\n",
                   courses[i].courseCode,
                   courses[i].courseName,
                   courses[i].courseType,
                   courses[i].totalPeriod,
                   courses[i].classPeriod,
                   courses[i].experiPeriod,
                   courses[i].creditHour,
                   courses[i].term);
            }
        }
        printf("数据已经全部显示!\n");
    }else{
        printf("输入错误!\n");
    }
    printf("\n");
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • 196
  • 197
  • 198
  • 199
  • 200
  • 201
  • 202
  • 203
  • 204
  • 205
  • 206
  • 207
  • 208
  • 209
  • 210
  • 211
  • 212
  • 213
  • 214
  • 215
  • 216
  • 217
  • 218
  • 219
  • 220
  • 221
  • 222
  • 223
  • 224
  • 225
  • 226
  • 227
  • 228
  • 229
  • 230
  • 231
  • 232
  • 233
  • 234
  • 235
  • 236
  • 237
  • 238
  • 239
  • 240
  • 241
  • 242
  • 243
  • 244
  • 245
  • 246
  • 247
  • 248
  • 249
  • 250
  • 251
  • 252
  • 253
  • 254
  • 255
  • 256
  • 257
  • 258
  • 259
  • 260
  • 261
  • 262
  • 263
  • 264
  • 265
  • 266
  • 267
  • 268
  • 269
  • 270
  • 271
  • 272
  • 273
  • 274
  • 275
  • 276
  • 277
  • 278
  • 279
  • 280
  • 281
  • 282
  • 283
  • 284
  • 285
  • 286
  • 287
  • 288
  • 289
  • 290
  • 291
  • 292
  • 293
  • 294
  • 295
  • 296
  • 297
  • 298
  • 299
  • 300
  • 301
  • 302
  • 303
  • 304
  • 305
  • 306
  • 307
  • 308
  • 309
  • 310
  • 311
  • 312
  • 313
  • 314
  • 315
  • 316
  • 317
  • 318
  • 319
  • 320
  • 321
  • 322
  • 323
  • 324
  • 325
  • 326
  • 327
  • 328
  • 329
  • 330
  • 331
  • 332
  • 333
  • 334
  • 335
  • 336
  • 337
  • 338
  • 339
  • 340
  • 341
  • 342
  • 343
  • 344
  • 345
  • 346
  • 347
  • 348
  • 349
  • 350
  • 351
  • 352
  • 353
  • 354
  • 355
  • 356
  • 357
  • 358
  • 359
  • 360
  • 361
  • 362
  • 363
  • 364
  • 365
  • 366
  • 367
  • 368
  • 369
  • 370
  • 371
  • 372
  • 373
  • 374
  • 375

5、演示

为了演示方便,可以先构造一些数据放入data.txt文件内,后续录入数据的时候可以直接复制粘贴到控制台。

1 C语言 编程语言  30 20 10 1.0 1
2 C语言 编程语言  30 20 10 1.0 1
3 C语言 编程语言  30 20 10 1.0 1
4 C语言 编程语言 30 20 10 1.0 1
5 C语言 编程语言 30 20 10 1.0 1
6 C语言 编程语言 30 20 10 1.0 1
7 C语言 编程语言 30 20 10 1.0 1
8 C语言 编程语言 30 20 10 1.0 1
9 C语言 编程语言 30 20 10 1.0 1
10 C语言 编程语言 30 20 10 1.0 1
11 C语言 编程语言 30 20 10 1.0 1
12 C语言 编程语言 30 20 10 1.0 1
13 C语言 编程语言 30 20 10 1.0 1
14 C语言 编程语言 30 20 10 1.0 1
15 C语言 编程语言 30 20 10 1.0 1
16 C语言 编程语言 30 20 10 1.0 1
17 C语言 编程语言 30 20 10 1.0 1
18 C语言 编程语言 30 20 10 1.0 1
19 C语言 编程语言 30 20 10 1.0 1
20 C语言 编程语言 30 20 10 1.0 1
21 C语言 编程语言 30 20 10 1.0 1
22 C语言 编程语言 30 20 10 1.0 1
23 C语言 编程语言 30 20 10 1.0 1
24 C语言 编程语言 30 20 10 1.0 1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
201901 1 
201902 1 
201903 1 
  • 1
  • 2
  • 3

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/615750
推荐阅读
相关标签
  

闽ICP备14008679号