C语言程序设计学生成绩管理系统课程设计报告_第1页
C语言程序设计学生成绩管理系统课程设计报告_第2页
C语言程序设计学生成绩管理系统课程设计报告_第3页
C语言程序设计学生成绩管理系统课程设计报告_第4页
C语言程序设计学生成绩管理系统课程设计报告_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

重庆科技学院《C语言课程设计》课程设计报告软件需求说明1.1程序的界面要求①整个系统均用C语言实现;②利用结构体数组来实现学生成绩的数据结构设计;③系统具有输入、显示、查询、删除、排序、插入、保存、读取等基本功能;④系统的各个功能模块都用函数的形式来实现;⑤要求能将学生成绩信息保存在文件中;⑥要求能从文件中读取学生信息并进行相关处理。1.2程序的功能每一条记录包括一个学生的学号、姓名、3门成绩、平均成绩。输入功能:进入后可以进行多条记录的输入并保存。显示功能:完成全部学生或满足指定条件记录的显示。查找功能:完成按学号或姓名查找学生记录,并显示。排序功能:按学生学号或平均成绩进行排序。插入功能:按学生学号或平均成绩高低插入一条学生记录。保存功能:将学生记录保存在自定义名称的文件中。读取功能:将保存在文件中的学生记录读取出来。有一个文本菜单来调用各个功能。系统分析与设计2.1程序的数据(结构)分析2.1.1定义结构体本程序需要定义多个结构体,用于存放学生的相关信息typedefstructCStudent{ charName[32]; /*学生姓名*/ intSno; /*学号*/ doubledDataStruct;/*数据结构成绩*/ doubledMath;/*数学成绩*/ doubledEnglish;/*英语成绩*/ doubleaver; /*平均成绩*/}CStudent;2.1.2main()主函数主函数功能比较简单,用while循环语句和switch多重选择语句来显示主界面和调用函数。在主函数的前面要写必须的头文件,预定义语句以及全局变量的结构体。2.1.3del()删除函数在C语言中无法做到删除和移动数据,所以删除记录要先将所有记录从文件中读出,删除后再将记录写回文件中。每读出一条记录,按其在文件中的顺序做好指针链接关系,然后查处要删除的学生信息,将其在链表中删除,最后再将变动的记录重新写回文件中。用指针,else/if结构来实现查找出要删除的学生。2.1.4insert()插入函数在插入函数中利用指针,while循环和else/if语句来实现输入的数据按照插入相 应的位置。2.1.5读取函数利用指针、链表打开已经储存的信息。voidRead() /*从文档读取*/{ charp[128]="file.txt"; FILE*fp; if((fp=fopen("file.txt","r"))==NULL) { printf("Openfile%serror!Strikeanykeytoexit!",p); system("pause"); exit(0); } SavePos=0; while(!feof(fp)) { fscanf(fp,"Name:%s\n",example[SavePos].Name); fscanf(fp,"Sno:%d\n",&example[SavePos].Sno); fscanf(fp,"Score(DS)%lf\n",&example[SavePos].dDataStruct); fscanf(fp,"Score(M)%lf\n",&example[SavePos].dMath); fscanf(fp,"Score(E)%lf\n",&example[SavePos].dEnglish); fscanf(fp,"Score(Average)%lf\n",&example[SavePos].aver); fscanf(fp,"*********************\n"); SavePos++; } fclose(fp); Display();}2.1.6save()保存函数主要利用指针来把信息保存在文件中。voidSave() /*保存到文档*/{ intj=0; constcharfname[128]="file.txt"; FILE*fp; //openfile fp=fopen(fname,"w"); //writeinfile for(j=0;j<SavePos;j++) { //fprintf(fp,"Thisisthefile.\n") fprintf(fp,"Name:%s\n",example[j].Name); fprintf(fp,"Sno:%d\n",example[j].Sno); fprintf(fp,"Score(DS)%f\n",example[j].dDataStruct); fprintf(fp,"Score(M)%f\n",example[j].dMath); fprintf(fp,"Score(E)%f\n",example[j].dEnglish); fprintf(fp,"Score(Average)%f\n",example[j].dEnglish); fprintf(fp,"*********************\n"); } //closefile fclose(fp); printf("保存成功\n");}2.2程序的算法设计学生成绩管理系统输出信息输出信息整理信息输入信息修改信息修改信息查询信息输出至文件输出至屏幕删除学生信息输出至文件输出至屏幕删除学生信息学生信息排序插入学生信息按学号查询按姓名查询从键盘输入从学生信息排序插入学生信息按学号查询按姓名查询从键盘输入从文件读入图2.2学生成绩管理系统功能模块图开始开始开始按学号按学号输入name输入输入name输入输入numi=j 1输入numi=j输出数据输入数据输出数据输入数据结束结束按9 按0图2.2输入模块图2.2查询模块开始输入学号输入学号该学号已存在该学号已存在 Y输入信息N输入信息保存并结束保存并结束图2.2插入模块程序的实现3.1主函数intmain(){ intchoice1=1,choice2; inti=1,s=1; do { printf("欢迎使用学生成绩管理系统\n"); printf("请选择程序功能\n");printf("1、信息录入\n"); printf("2、信息查询\n"); printf("3、插入\n"); printf("4、排序\n"); printf("5、保存\n"); printf("6、删除\n"); printf("7、读取并显示\n"); printf("8、退出程序\n"); scanf("%d",&choice1);定义数据结构用一个类的嵌套定义structstudent*next;用整型数据定义学号和成绩,用char定义姓名。typedefstructCStudent{ charName[32]; /*学生姓名*/ intSno; /*学号*/ doubledDataStruct;/*数据结构成绩*/ doubledMath;/*数学成绩*/ doubledEnglish;/*英语成绩*/ doubleaver; /*平均成绩*/}CStudent;CStudentexample[1024];intSavePos=0;3.3函数说明链表定义头指针stu*s,switch函数中用了8个case。case1: Record(SavePos);break;//录入学生信息case2:Search_Name();Search_Sno();break;//查询学生信息case3:Insert_Score();break;//插入学生信息case4: Sort_Sno();Sort_Score();break;//学生信息排序case5:Save()student(s);break;//保存学生信息case6: Delete_Sno();Delete_Name();break;//删除学生信息case7:Read()student(s);break;//读取学生信息case8: exit(0);break;//退出系统文件录入功能voidRecord(intj)/*录入*/{ printf("信息录入\n"); printf("姓名:"); scanf("%s",example[j].Name); printf("学号:"); scanf("%d",&example[j].Sno); printf("数据结构:"); scanf("%lf",&example[j].dDataStruct); printf("数学:"); scanf("%lf",&example[j].dMath); printf("英语:"); scanf("%lf",&example[j].dEnglish); printf("平均成绩:"); scanf("%lf",&example[j].aver);文件读取功能读取功能运用文件指针的方法,与While循环语句完成。voidRead() /*从文档读取*/{ charp[128]="file.txt"; FILE*fp; if((fp=fopen("file.txt","r"))==NULL) { printf("Openfile%serror!Strikeanykeytoexit!",p); system("pause"); exit(0); } SavePos=0; while(!feof(fp)) { fscanf(fp,"Name:%s\n",example[SavePos].Name); fscanf(fp,"Sno:%d\n",&example[SavePos].Sno); fscanf(fp,"Score(DS)%lf\n",&example[SavePos].dDataStruct); fscanf(fp,"Score(M)%lf\n",&example[SavePos].dMath); fscanf(fp,"Score(E)%lf\n",&example[SavePos].dEnglish); fscanf(fp,"Score(Average)%lf\n",&example[SavePos].aver); fscanf(fp,"*********************\n"); SavePos++; } fclose(fp); Display();}插入功能首先建立循环,检测插入的学号是否已存在,若存在则停止插入;若不存在,则继续进行输入学生信息。voidInsert_Score(){ inti,j,m,flag; i=SavePos; do { flag=1; while(flag) { flag=0; printf("请输入第%d位:\n",i+1); printf("请输入学号检验该生是否已经存在\n"); scanf("%d",&example[i].Sno); for(j=0;j<i;j++) if(example[i].Sno==example[j].Sno) { printf("已存在该号,请检查重新录入!\n"); flag=1; break;/*重复立即退该层循环,提高判断速度*/ } Record(i); printf("录入完毕\n\n"); Sort_Score(); }while(0);}程序使用说明4.1主页面将写好的程序用MicrosoftVisualC++6.0打开并运行,首先出现的是主页面,如图4-1所示。图4-1录入信息页面输入数字1,按提示进行学生成绩的录入,并按数字5保存信息。继续录入按数字9,结束录入按数字0。如图4-2图4-2信息查询页面返回主页面,按数字2,进行学生信息查询,分为按学号查询和姓名查询。如图4-3-1。图4-3-1按数字1与按数字2查询结果页面如图4-3-2所示。图4-3-2图4-3-2插入信息页面返回主页面,按数字3,首先检验该学号是否存在,若存在则程序停止录入,否则继续进行录入。如图4-4-1所示。图4-4-1排序功能页面返回主页面,按数字4进行学生信息的排序。分为按学号排序和按平均成绩排序。如图4-5-1所示。 图4-5-14.6信息删除页面返回主页面,按数字6进行学生信息删除页面,分为按学号删除和按姓名删除,如图4-6-1所示。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论