




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、一. 课程设计目的和要求(一). 课程设计目的本课程设计是重要的实践性环节之一,是在学生学习完程序设计语言(C)课程后进行的一次全面的综合练习。本课程设计的目的和任务:1. 巩固和加深学生对C语言课程的基本知识的理解和掌握2. 掌握C语言编程和程序调试的基本技能3. 利用C语言进行基本的软件设计4. 掌握书写程序设计说明文档的能力5. 提高运用C语言解决实际问题的能力(二). 课程设计要求1. 分析课程设计题目的要求2. 写出详细设计说明3. 编写程序代码,调试程序使其能正确运行4. 设计完成的软件要便于操作和使用4. 设计完成后提交课程设计报告二. 课程设计任务内容设计一个学生成绩管理系统。
2、系统功能:1)具备对学生基础数据的维护功能(添加、删除、修改)2)具备对课程基础数据的维护功能(添加、删除、修改)3)具备对学生成绩数据的维护功能(添加、删除、修改)4) 具备对成绩的查询功能(按学号、姓名、或课程名查询成绩,排序等 )5) 具备对成绩的统计功能(最高分,最低分,平均分,及格率等)6) 采用菜单界面三. 总体设计说明1 工程设计说明 (工程中有哪些文件组成,各有什么作用) 该工程文件中有student.h, studentmain.c, student.c, course.c, scgrade.c query.c tongji.c。student.h是头文件,主要存放一些其他函
3、数共用的东西,比如结构体之类的。Studentmain.c存放main函数主菜单程序。其他几个是存放的实现各个功能的函数。另外,还有STUDENT.DAT,COURSE.DAT,GRADE.DAT三个文件,主要存放学生,课程,成绩的信息的。还有一个TEMP.DAT文件,用于暂时存放数据。2 菜单结构设计 (列出各级菜单)3 数据结构设计 (三个数据文件用到的的结构定义)学生结构体:struct student long sno; char sname20; char sclass20;课程结构体:struct course int cno; char cname30;成绩结构体:struct
4、scgrade long sno; int cno; float grade;四. 详细设计说明1 学生数据维护子系统设计说明 (每个功能模块的设计思路,哪些功能是自己增强的, 加注释的源代码)#include<stdio.h>#include"STUDENT.H"/该部分为学生主菜单程序,分别调用添加,修改,删除三个函数。void studentmenu() void addstudent(); void modistudent(); void deletestudent(); char a; while(1) puts("n"); put
5、s(" 系 统 主 菜 单"); puts(" 1: 学 生 数 据 添 加"); puts(" 2: 学 生 数 据 修 改"); puts(" 3: 学 生 数 据 删 除"); puts(" 0: 退 出 系 统"); printf("请输入数字选择: "); a=getche(); switch(a) case '1': addstudent(); break; case '2': modistudent(); break; case
6、'3': deletestudent(); break; case '0': system("cls"); return; default: return; /添加数据void addstudent() FILE *fp;struct student s; struct student sw;char ch;int flag=0;/打开文件。 fp=fopen("d:STUDENTSTUDENT.dat","ab+"); if(!fp) printf("Create file error!n&
7、quot;); return; dodo /*输入一条学生信息,另外,增加了检验数据是否重复的功能*/printf("nEnter a student number name class:");fflush(stdin);scanf("%ld%s%s",&s.sno,s.sname,s.sclass);rewind(fp);while(!feof(fp) fread(&sw,sizeof(sw),1,fp);if(sw.sno=s.sno) flag=1;printf("数据输入重复,请重新输入!");break;wh
8、ile(flag);fwrite(&s,sizeof(s),1,fp);/ 提示是否继续输入。printf("Input another student? y/n");ch=getche();while(ch='y');fclose(fp);/修改数据void modistudent() FILE *fp;char ch;struct student s, modis;int found=0;fp=fopen("D:STUDENTSTUDENT.dat","rb+");if(!fp) printf("
9、Create file error!n"); return; /*显示文件中的所有学生信息*/fread(&s,sizeof(s),1,fp);PRINT1;while(!feof(fp) PRINT2; PRINT1; fread(&s,sizeof(s),1,fp);/*提示输入要修改的学生号, 存入modis.sno*/printf("please enter the no of the modify");scanf("%ld",&modis.sno);/*找到要修改的学生并显示 */rewind(fp);whil
10、e( 1 ) fread(&s,sizeof(s),1,fp); if(feof(fp) break; if(s.sno=modis.sno) found=1; break; if(!found) printf("未找到你要找的数据!"); return; else PRINT2;printf("n你确实要修改该学生的其他信息吗?(Y/N)");ch=getche();if(ch='Y'|ch='y') /*提示输入要修改的学生姓名, 存入modis.sname*/printf("nplease ente
11、r the name of the modifyn");scanf("%s",modis.sname);printf("nplease enter the class of the modifyn");scanf("%s",modis.sclass);fseek(fp,-(int)sizeof(s),SEEK_CUR); /*从当前位置向前移动一个s的长度*/*将modis写到文件(覆盖原数据) */ fwrite(&modis,sizeof(s),1,fp);fclose(fp); /删除数据。void delet
12、estudent() FILE *fp,*fp1;char ch;int found=0,num;struct student s;fp=fopen("D:studentstudent.dat","rb");if(!fp) printf("Create file error!");return;/*显示文件中的所有学生信息*/fread(&s,sizeof(s),1,fp);PRINT1;while(!feof(fp) PRINT2;PRINT1;fread(&s,sizeof(s),1,fp);printf(&quo
13、t;please enter the no of the delete");scanf("%d",&num); /找到要修改的学生信息,显示!rewind(fp);while(1) fread(&s,sizeof(s),1,fp);if(feof(fp) break;if(s.sno=num) found=1;break;if(!found) printf("未找到你要找的数据!");return;elsePRINT2;printf("n你确实要删除该学生的信息吗?(Y/N)");ch=getche();/将
14、删除后的信息复制到temp文件中。if(ch='Y'|ch='y') fp1=fopen("D:studenttemp.dat","wb");rewind(fp);while(1) fread(&s,sizeof(s),1,fp);if(feof(fp) break;if(s.sno!=num) fwrite(&s,sizeof(s),1,fp1);fclose(fp1);fclose(fp);将temp文件的信息再重新覆盖掉原来的student文件。fp=fopen("D:studentstud
15、ent.dat","wb");fp1=fopen("D:studenttemp.dat","rb");while(1) fread(&s,sizeof(s),1,fp1);if(feof(fp1) break;fwrite(&s,sizeof(s),1,fp);fclose(fp1);fclose(fp); 2 课程数据维护子系统设计说明#include<stdio.h>#include"STUDENT.H"void coursemenu() void addcourse();
16、 void modicourse(); void deletecourse(); char a; while(1) puts("n"); puts(" 系 统 主 菜 单"); puts(" 1: 课 程 数 据 添 加"); puts(" 2: 课 程 数 据 修 改"); puts(" 3: 课 程 数 据 删 除"); puts(" 0: 退 出 系 统"); printf("请输入数字选择: "); a=getche(); switch(a) ca
17、se '1': addcourse(); break; case '2': modicourse(); break; case '3': deletecourse(); break; case '0': system("cls"); return; default: return; /添加数据。void addcourse() FILE *fp;struct course c,cw; char ch;int flag=0; fp=fopen("d:STUDENTCOURSE.dat",&qu
18、ot;ab+"); if(!fp) printf("Create file error!n"); return; /输入一条课程信息,提示是否重新输入,另外增加检验数据是否重复的功能。dodoprintf("nEnter a course number name:");fflush(stdin);scanf("%d%s",&o,ame);rewind(fp);while(!feof(fp) fread(&cw,sizeof(cw),1,fp);if(o=o) flag=1;printf("数据输入重
19、复,请重新输入!");break;while(flag);fwrite(&c,sizeof(c),1,fp);printf("Input another course? y/n");ch=getche();while(ch='y');fclose(fp);/修改数据void modicourse() FILE *fp;char ch;struct course c, modis;int found=0;fp=fopen("D:STUDENTCOURSE.dat","rb+");if(!fp) prin
20、tf("Create file error!n"); return; /*显示文件中的所有课程信息*/fread(&c,sizeof(c),1,fp);PRINT1;while(!feof(fp) PRINT3; PRINT1; fread(&c,sizeof(c),1,fp);/*提示输入要修改的课程号, 存入modis.sno*/printf("please enter the no of the modify");scanf("%d",&o);/*找到要修改的课程并显示 */rewind(fp);whil
21、e( 1 ) fread(&c,sizeof(c),1,fp); if(feof(fp) break; if(o=o) found=1; break; if(!found) printf("未找到你要找的数据!"); return; else PRINT3;printf("n你确实要修改该课程的其他信息吗?(Y/N)");ch=getche();if(ch='Y'|ch='y') /*提示输入要修改的课程名, 存入ame*/printf("nplease enter the name of the mod
22、ifyn");scanf("%s",ame);fseek(fp,-sizeof(c),SEEK_CUR); /*从当前位置向前移动一个s的长度*/*将modis写到文件(覆盖原数据) */fwrite(&modis,sizeof(c),1,fp);fclose(fp); /删除数据。void deletecourse() FILE *fp,*fp1;char ch;int found=0,num;struct course c;fp=fopen("D:studentCOURSE.dat","rb");if(!fp)
23、printf("Create file error!");return;/显示文件中的信息。fread(&c,sizeof(c),1,fp);PRINT1;while(!feof(fp) PRINT3;PRINT1;fread(&c,sizeof(c),1,fp);/*提示输入要修改的课程号, 存入num*/printf("please enter the no of the delete");scanf("%d",&num); /*找到要修改的课程并显示 */rewind(fp);while(1) fread
24、(&c,sizeof(c),1,fp);if(feof(fp) break;if(o=num) found=1;break;if(!found) printf("未找到你要找的数据!");return;elsePRINT3;printf("n你确实要删除该学生的信息吗?(Y/N)");ch=getche();/将删除后的文件复制到temp文件中。if(ch='Y'|ch='y') fp1=fopen("D:studenttemp.dat","wb");rewind(fp);w
25、hile(1) fread(&c,sizeof(c),1,fp);if(feof(fp) break;if(o!=num) fwrite(&c,sizeof(c),1,fp1);fclose(fp1);fclose(fp);/将temp文件中的信息覆盖掉原来course的文件中。fp=fopen("D:studentCOURSE.dat","wb");fp1=fopen("D:studenttemp.dat","rb");while(1) fread(&c,sizeof(c),1,fp1);
26、if(feof(fp1) break;fwrite(&c,sizeof(c),1,fp);fclose(fp1);fclose(fp);3 成绩数据维护子系统设计说明#include<stdio.h>#include"STUDENT.H"void grademenu() void addgrade(); void modigrade(); void deletegrade(); char a; while(1) puts("n"); puts(" 系 统 主 菜 单"); puts(" 1: 成 绩 数
27、据 添 加"); puts(" 2: 成 绩 数 据 修 改"); puts(" 3: 成 绩 数 据 删 除"); puts(" 0: 退 出 系 统"); printf("请输入数字选择: "); a=getche(); switch(a) case '1': addgrade(); break; case '2': modigrade(); break; case '3': deletegrade(); break; case '0':
28、 system("cls"); return; default: return; /添加成绩!void addgrade() FILE *fp;struct scgrade sc; struct scgrade scw;char ch;int flag=0; fp=fopen("d:STUDENTGRADE.dat","ab+"); if(!fp) printf("Create file error!n"); return; /输入一条成绩信息,提示是否重新输入,另外增加检验数据是否重复的功能dodo printf
29、("nEnter a student number ,a course number, grade :");fflush(stdin);scanf("%ld%d%f",&sc.sno,&o,&sc.grade);if(sc.grade<0|sc.grade>100) flag=1;printf("n输入成绩格式不正确,请重新输入");rewind(fp);while(!feof(fp) fread(&scw,sizeof(scw),1,fp);if(o=o&&scw.sno=
30、sc.sno) flag=1;printf("n数据输入重复,请重新输入!");break;while(flag);fwrite(&sc,sizeof(sc),1,fp);printf("Input another student's grade? y/n");ch=getche();while(ch='y');fclose(fp);/修改数据void modigrade() FILE *fp;char ch;struct scgrade sc, modis;int found=0;fp=fopen("D:STU
31、DENTGRADE.dat","rb+");if(!fp) printf("Create file error!n"); return; /*显示文件中的所有成绩信息*/fread(&sc,sizeof(sc),1,fp);PRINT1;while(!feof(fp) PRINT4; PRINT1; fread(&sc,sizeof(sc),1,fp);/*提示输入要修改的学生号, 存入modis.sno*/printf("please enter the no of the modify");scanf(&
32、quot;%ld",&modis.sno);/*找到要修改的学生成绩并显示 */rewind(fp);while( 1 ) fread(&sc,sizeof(sc),1,fp); if(feof(fp) break; if(sc.sno=modis.sno) found=1; break; if(!found) printf("未找到你要找的数据!"); return; else PRINT4;printf("n你确实要修改该学生的其他信息吗?(Y/N)");ch=getche();if(ch='Y'|ch=
33、39;y') /*提示输入要修改的学生课程名和成绩, 存入o和modis.grade*/printf("nplease enter the course number of the modifyn");scanf("%d",&o);printf("nplease enter the grade of the modifyn");scanf("%f",&modis.grade);fseek(fp,-(int)sizeof(sc),SEEK_CUR); /*从当前位置向前移动一个sc的长度*/*
34、将modis写到文件(覆盖原数据) */fwrite(&modis,sizeof(sc),1,fp);fclose(fp); /删除数据void deletegrade() FILE *fp,*fp1;char ch;int found=0,num;struct scgrade sc;fp=fopen("D:studentGRADE.dat","rb");if(!fp) printf("Create file error!");return;/显示文件中的信息fread(&sc,sizeof(sc),1,fp);PRI
35、NT1;while(!feof(fp) PRINT4;PRINT1;fread(&sc,sizeof(sc),1,fp);/*提示输入要删除的学号, 存入num*/printf("please enter the no of the delete");scanf("%d",&num); /*找到要删除的成绩并显示 */rewind(fp);while(1) fread(&sc,sizeof(sc),1,fp);if(feof(fp) break;if(sc.sno=num) found=1;break;if(!found) pri
36、ntf("未找到你要找的数据!");return;elsePRINT4;printf("n你确实要删除该学生的信息吗?(Y/N)");ch=getche(); /将删除后的文件复制到temp文件中。if(ch='Y'|ch='y') fp1=fopen("D:studenttemp.dat","wb");rewind(fp);while(1) fread(&sc,sizeof(sc),1,fp);if(feof(fp) break;if(sc.sno!=num) fwrite
37、(&sc,sizeof(sc),1,fp1);fclose(fp1);fclose(fp);/将temp文件中的信息覆盖掉原来course的文件中。fp=fopen("D:studentGRADE.dat","wb");fp1=fopen("D:studenttemp.dat","rb");while(1) fread(&sc,sizeof(sc),1,fp1);if(feof(fp1) break;fwrite(&sc,sizeof(sc),1,fp);fclose(fp1);fclose
38、(fp);4 查询数据维护子系统设计说明#include<stdio.h>#include<string.h>#include"STUDENT.H"void query() void snoquery();void snamequery();void cnamequery();void cnamequeryson();void classandcnamequery();char a;while(1) puts("n");puts(" 系 统 主 菜 单");puts(" 1: 按 学 号 查 询 成
39、绩");puts(" 2: 按 姓 名 查 询 成 绩");puts(" 3: 按 课 名 查 询 成 绩");puts(" 4: 按 课 名 查 询 成 绩(子函数)");puts(" 5: 按 班 名 课 名 查 询 成 绩");puts(" 0: 退 出 系 统");printf("请输入数字选择: ");a=getche();switch(a) case '1': snoquery(); break; case '2': sn
40、amequery(); break; case '3': cnamequery(); break; case '4': cnamequeryson(); break; case '5': classandcnamequery(); break; case '0': system("cls"); return; default: return;/按学号查询void snoquery() FILE *fp;struct scgrade sc; char ch;long no;int found=0;fp=fopen
41、("d:STUDENTGRADE.dat","rb");if(!fp) printf("Create file error!n"); return; /提示要查询成绩的学号。printf("nEnter a student number of the query:");scanf("%ld",&no);/显示并输出。while(1) fread(&sc,sizeof(sc),1,fp); if(feof(fp) break; if(sc.sno=no) found=1; PRIN
42、T1;PRINT4;PRINT1;if(!found) printf("未找到你要找的数据!");return; fclose(fp);/按姓名查询void snamequery() FILE *fp;struct student s;struct scgrade sc; char ch,name20;long no;int found=0;fp=fopen("d:STUDENTSTUDENT.dat","rb");if(!fp) printf("Create file error!n"); return; /提示
43、输入要查询成绩的姓名。printf("nEnter a student name of the query:");scanf("%s",name);/找到该生的的学号。while(1) fread(&s,sizeof(s),1,fp); if(feof(fp) break; if(strcmp(s.sname,name)=0) found=1;no=s.sno;/PRINT1;/PRINT2;/PRINT1;if(!found) printf("未找到你要找的数据!");return; fclose(fp);fp=fopen(
44、"d:STUDENTGRADE.dat","rb");found=0;if(!fp) printf("Create file error!n"); return; /找到该生成绩,并显示。while(1) fread(&sc,sizeof(sc),1,fp); if(feof(fp) break; if(sc.sno=no) found=1; PRINT1;PRINT4;PRINT1;if(!found) printf("未找到你要找的数据!");return; fclose(fp);/按课名查询void
45、cnamequery() FILE *fp;struct course c;struct scgrade sc,temp; struct scgrade grades80;char name20;int no,i,j,n=0;int found=0;fp=fopen("d:STUDENTCOURSE.dat","rb");if(!fp) printf("Create file error!n"); return; /提示输入要查询的课程名printf("nEnter a course name of the query:&q
46、uot;);scanf("%s",name);/找到该课程的课称号。while(1) fread(&c,sizeof(c),1,fp); if(feof(fp) break; if(strcmp(ame,name)=0) found=1;no=o;/PRINT1;/PRINT3;/PRINT1;if(!found) printf("未找到你要找的数据!");return; fclose(fp);fp=fopen("d:STUDENTGRADE.dat","rb");found=0;if(!fp) print
47、f("Create file error!n"); return; /在成绩信息中找到该课程号的成绩while(1) fread(&sc,sizeof(sc),1,fp); if(feof(fp) break; if(o=no) found=1;gradesn=sc;n=n+1;/PRINT1;/PRINT4;/排序for(i=0;i<n;i+) for(j=i+1;j<=n;j+) if(gradesi.grade<gradesj.grade) temp=gradesi;gradesi=gradesj;gradesj=temp;/显示for(i=
48、0;i<n;i+) PRINT1;printf("%-5ld%5d%15f",gradesi.sno,o,gradesi.grade);PRINT1;if(!found) printf("未找到你要找的数据!");return; fclose(fp);/按课程名,用子函数查询。void cnamequeryson() int getcno(char name);/获取课程号。int getgrade(int cno,struct scgrade grades);/获取成绩void sort(struct scgrade grad
49、es,int n);/排序void display(struct scgrade grades,int n);/显示struct scgrade grades80;char name20;int cno, n;printf("nEnter a course name of the query:");scanf("%s",name);cno=getcno(name);if(cno=-1) puts("No such course!"); return;n=getgrade(cno,grades);sort(grades,n);displ
50、ay(grades, n);int getcno(char name) FILE *fp;struct course c;int found=0,no;fp=fopen("d:STUDENTCOURSE.dat","rb");if(!fp) printf("Create file error!n"); return -1; /获取课程号。while(1) fread(&c,sizeof(c),1,fp); if(feof(fp) break; if(strcmp(ame,name)=0) found=1;no=o;/PRINT
51、1;/PRINT3;/PRINT1;return no;if(!found) printf("未找到你要找的数据!");return -1; fclose(fp);int getgrade(int cno,struct scgrade grades) FILE *fp;struct scgrade sc;int n=0,found=0;fp=fopen("d:STUDENTGRADE.dat","rb");if(!fp) printf("Create file error!n"); return; /通过课程号,找到成绩。while(1) fread(&sc,sizeof(sc),1,fp); if(feof(fp) break; if(o=cno) found=1;gradesn=sc;n=n+1;/PRINT1; /PRINT4; return n;if(!found) printf(&q
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论