C语言课程设计报告_学生学籍管理系统
- 格式:doc
- 大小:131.00 KB
- 文档页数:14
课程名称___C语言程序设计_ __目录一、设计目的与要求 (3)1.1 题目与设计要求 (3)1.2 本程序设计的知识点 (4)二、功能设计 (4)2.1 总体设计 (4)2.2 详细设计 (5)4.1 测试结果及分析 (12)五、总结 (14)六、参考文献 (14)一、设计目的与要求1.1 题目与设计要求题目:学生学籍管理系统目的:1、了解和熟悉Visual C++软件编程开发环境2、熟练掌握结构化程序设计的步骤和模块化设计方法3、熟练掌握C语言数据类型,熟记字符型数据和整形数据的定义和使用4、熟练掌握用while语句、do…while语句和for语句实现循环结构程序设计的方法5、掌握一维数组、二维数组的定义、赋值和输入输出的方法6、掌握与数组有关的算法(特别是排序算法,熟练掌握冒泡排序法)7、熟悉函数的定义、声明方法及全局变量和局部变量的概念与用法,掌握函数的调用方法8、掌握结构体类型变量的定义和使用及结构体类型数组的概念和应用设计要求:学生学籍信息管理系统设计1、需求分析学生基本信息、学生成绩基本信息要存入文件当中,因而要提供文件的输入输出操作;查询功能要求提供查找和显示操作;删除功能要求实现删除操作;排序功能要求实现排序操作;另外还应该提供键盘式选择菜单以实现功能选择。
2、总体设计整个系统可以设计为数据录入模块、数据查询模块、数据删除模块和数据排序模块。
3、详细设计设计学生基本信息和学生成绩基本信息结构体数组。
Struct{int stuNo; //学号char name[20]; //姓名char sex[2]; //性别int domNum; //宿舍号int tel; //电话号码}StuInfo; //学生基本信息结构体Struct{int stuNo; //学号char courseNo; //课程编号char courseName; //课程名称int creditHour; //学分Int triGrade; //平时成绩Int experiGrade; //实验成绩Int examGrade; //卷面成绩Float totalGrade; //综合成绩Float finalCreHour; //实得学分}StuGraInfo; //学生成绩基本信息结构体(1)数据录入模块:学生基本信息文件可以在磁盘建立,采用写文件方式录入学生成绩基本信息。
综合成绩和实得学分通过计算得到。
(2)查询模块:通过菜单选择查询功能,再选择学生基本情况查询和成绩查询,若选择前者,再通过菜单选择学号、姓名或宿舍号码,按照基本查找算法查找A.TXT,然后把查找结果输出若选择后者,则先在A.TXT中查找学号对应的姓名,再在B.TXT中查找该学生的课程情况,并统计科目和实得总学分,输出结果。
(3)删除模块:通过菜单选择删除学生的功能,输入要删除学生的学号,则分别在A.TXT和B.TXT中查找该生信息,删除之;或者输入学生的姓名,先在A.TXT中得到该生的学号,删除该生信息,再在B.TXT中删除该学号对应的信息。
注意:C语言中没有直接删除信息的函数,需要自己实现,可以采取读出数据,判断数据(如果不删除,则进入缓冲区,否则删除),写入数据(把缓冲区中的数据写入文件)的步骤进行。
(4)排序模块:通过菜单选择排序依据,采用排序算法(冒泡、插入、选择等)对数据进行排序并输出结果。
1.2 本程序设计的知识点陈述开发过程中用到的知识点,如结构体、数组、指针等。
二、功能设计2.1 总体设计其中包含数据录入模块、查询模块、删除模块、排序模块四大功能功能模块三、程序实现⑴利用了组合体的方式定义结构体数组,提供学生基本信息,定义如下:typedef struct {int Id; //学号char name[10];//姓名char sex[6]; //性别int room; //宿舍号int tel; //电话号码} StudentInfo; //定义学生信息的结构体类型⑵同时定义了另一结构体数组,提供学生成绩基本信息,定义如下:typedef struct {int Id;char courseNo[10]; //课程编号char courseName[20];//课程名float a; // 课程学分float b; // 平时成绩float c; // 实验成绩float d; // 卷面成绩float e; // 综合成绩float f; // 实际学分} MarkInfo; //定义课程信息的结构体类型使用以上结构体数组,使程序变得思路清晰,设计过程也变得相对简单。
同时,定义并使用了如下函数,声明和定义void ReadFile(); //读取文件void DisplayMainMenu(); //显示主菜单void DataInput(); //数据录入void DataQuery(); //数据查询void DataDelete(); //数据删除void DataSort(); //数据排序void QueryById(int ); //按学号查询void QueryByRoom(int ); //按宿舍查询void QueryMark(int ); //按成绩查询void sort1(); //按综合成绩排序void sort2(); //按实得学分排序void markput(); //成绩输出StudentInfo si[30]; // 学生信息结构数组MarkInfo mi[150]; // 学生成绩结构数组int sp=0; // 学生信息结构数组中学生数int mp=0; // 学生成绩结构数组中成绩数***************读取数据、计算***************在这段功能模块中,利用指针变量来读取结构体数组文件中的相应信息,是程序的编写、阅读和运行变得简洁明了。
此外,在这段程序中,还对文件中的数据按照题目的具体要求对综合成绩和学分做了自动计算。
void ReadFile( ){F ILE *fp;i f((fp = fopen("A.txt","r"))==NULL)p rintf("cant open the file\n");w hile (!feof(fp)){fscanf(fp,"%d%s%s%d%d",&si[sp].Id,si[sp].name,&si[sp].sex,&si[sp].room,&si[sp].tel);sp++;}f close (fp);f p = fopen("B.txt","r");w hile (!feof(fp)){fscanf(fp,"%d%s%s%d%d%d%d",&mi[mp].Id,mi[mp].courseNo,mi[mp].courseName,&mi[mp].a,&mi[ mp].b,&mi[mp].c, &mi[mp].d);if (mi[mp].c == -1)mi[mp].e = 0.3*mi[mp].b+0.7*mi[mp].d;elsemi[mp].e = 0.15*mi[mp].b+0.15*mi[mp].c+0.7*mi[mp].d;if ( mi[mp].e >= 90. ) mi[mp].f = mi[mp].a;else if ( mi [mp].e >= 80. )mi[mp].f = mi[mp].a *0.8;else if ( mi[mp].e >= 70. )mi[mp].f = mi[mp].a *0.75;else if ( mi[mp].e >= 60. )mi[mp].f = mi[mp].a *0.6;else mi[mp].f = 0;mp++;}f close(fp);}*************** 显示主菜单***************这部分是对本程序的主要功能做出的展示,体现了本程序的五大功能,简洁明白,一目了然。
V oid DisplayMainMenu(){printf (“\n 1) 数据录入\n 2) 数据查询\n 3) 数据删除\n 4) 数据排序\n 5) 程序结束\n “);}*************** 数据录入模块*******************录入每个学生的学号、课程编号、课程名称、学分、平时成绩、实验成绩、卷面成绩共7个数据,即对关于学生成绩基本信息的结构体数组进行输入,也就是文件B.TXT中的内容。
void DataInput(){F ILE *fp;i nt i;p rintf ("学生的学号课程编号课程名称学分平时成绩实验成绩卷面成绩\n");w hile(1){scanf("%d%s%s%d%d%d%d",&mi[mp].Id,mi[mp].courseNo,mi[mp].courseName,&mi[mp].a,&mi[m p].b,&mi[mp].c, &mi[mp].d);i f(mi[mp].Id==-1)break;i f (mi[mp].c == -1)mi[mp].e = 0.3*mi[mp].b+0.7*mi[mp].d;elsemi[mp].e = 0.15*mi[mp].b+0.15*mi[mp].c+0.7*mi[mp].d;if ( mi[mp].e >= 90. ) mi[mp].f = mi[mp].a;else if ( mi [mp].e >= 80. )mi[mp].f = mi[mp].a *0.8;else if ( mi[mp].e >= 70. )mi[mp].f = mi[mp].a *0.75;else if ( mi[mp].e >= 60. )mi[mp].f = mi[mp].a *0.6;else mi[mp].f = 0;mp++;}f p = fopen("B.txt","r+");f or(i=0;i<mp;i++)fprintf(fp,"%d%s%s%d%d%d%d",&mi[i].Id,mi[i].courseNo,mi[i].courseName,&mi[i].a,&m i[mp].b,&mi[i].c, &mi[i].d);f close(fp);}******************* 查询模块********************此段程序是为实现信息查询功能而设计的。