赞
踩
系统以菜单方式工作,因而要提供键盘式选择菜单以实现功能选择;由于课程信息要用文件保存,因而要提供文件的输入输出操作;由于要浏览信息,所以要提供显示功能;要实现查询功能,故要提供查找操作。
整个系统可以设计为信息输入模块、信息查询模块以及信息浏览模块。
数据结构采用结构体,这里采用课程信息结构体和学生选课信息结构体。
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)信息查询模块
通过菜单选择查询字段,可以按照课程编号、课程名称、课程性质、开课学期、学分对课程信息文件进行查找,查找算法可以选择基本查找、二分查找等算法。
可以通过菜单选择课程编号,在学生选课信息文件中查询该课程学生选修情况。
开发环境: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"); }
为了演示方便,可以先构造一些数据放入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
201901 1
201902 1
201903 1
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。