学生成绩管理系统样本样本_第1页
学生成绩管理系统样本样本_第2页
学生成绩管理系统样本样本_第3页
学生成绩管理系统样本样本_第4页
学生成绩管理系统样本样本_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

资料内容仅供您学习参考,如有不当之处,请联系改正或者删除。成绩评定教师签名嘉应学院计算机学院《数据结构》实验报告课程名称:数据结构开课学期:-第1学期班级:1401指导老师:钟治初实验题目:学生成绩管理系统学号:姓名:苏永达提交时间:10月27日实验要求:设计一个学生成绩管理系统,模拟高考成绩的管理。功能至少包括数据输入,输出,查找,插入,删除,修改,排序,统计各成绩段的人数,考生成绩的排位,报考志愿的检索等。所有输入输出数据均使用文本文件进行读写。所有过渡性数据使用二进制文件进行读写和保存。设计使用平行志愿进行出档。设计使用非平行志愿行进出档。设计志愿时,能够设计12个志愿,如果平行志愿,则前后各6个分别为第一组和第二组平行志愿处理。设计考生记录的字段时,能够预留补录志愿的字段。或者将未录取考生的数据进行备份,然后将志愿清空后再增加补录志愿。二、功能:(1)按学号顺序输入学生信息,包括学号、姓名、性别、课程单科成绩(单科成绩包括C语言、高数、大学语文、汇编、中近史),并存入文件中。(2)从文件读取数据(3)删除学生信息(4)查询学生信息(查询可分为精确查询和模糊查询)(5)修改学生信息(要求修改后,数据依然是按学号顺序排列)(6)插入学生信息(要求插入后,数据依然是按学号顺序排列)(7)附加功能,学生可自由发挥,如:排名、求各门课程平均分等。三、实验目的1、掌握和巩固C语言编写的相关知识和技巧,特别是函数、指针、结构体。2、能够采用模块化思想调试程序。3、经过该课程设计的操作与实践,能够根据数据对象的特性,学会数据组织的方法,把现实世界中的实际问题在计算机内部表示出来,并培养基本的、良好的程序设计技能,全面提高学生的程序设计、开发能力。四、系统分析4.1相关基础知识选择、循环、函数、指针、结构体、链表4.2总体方案架构图:方案描述:菜单:运用switchcase选择功能,在每个case中有相对应的调用语句,调用相对应的函数。删除功能:调用删除函数,判断是否保存,如果保存写入文件。插入功能:运用链表插入。修改功能:调用删除函数跟插入函数,先删除再插入,从而实现修改功能。查询功能:调用菜单中的查询函数,用循环实现查询功能。排名功能:调用菜单中的排名函数,经过冒泡排序法实现功能。保存功能:运用写入文件。五、系统设计定义一个student类型的结构体,里面包含学生信息,包括学号、姓名、性别、课程单科成绩(单科成绩包括C语言、高数、大学语文、汇编、中近史)、总分、平均成绩。5.1新建功能从键盘输入N个学生基本信息,包括学号、姓名、性别、课程单科成绩(单科成绩包括C语言、高数、大学语文、汇编、中近史),编程根据输入信息计算各学生总分和平均分。创立动态链表,将学生信息存入链表中。在DOS屏幕上打印链表内所有学生信息。新建一个文件,将动态链表中的数据(即输入的学生信息)存入文件中。5.2打开功能打开一个文件,从文件中读取学生信息,并新建链表,将数据存入动态链表。在DOS屏幕上打印链表内所有学生信息。5.3修改功能在DOS屏幕上打印出当前的所有学生信息。输入待修改的学生学号,若不存在,输出”查无此人”;若存在,则输入修改的信息,并存回学生信息链表中,存回后学生信息链表依然是按学号顺序排列。最后在DOS屏幕上打印出新的所有学生信息。5.4插入功能在DOS屏幕上打印出当前的所有学生信息。输入插入信息的条数,从第一条开始到最后一条,依次输入每条学生信息,包括学号、姓名、性别、课程单科成绩(单科成绩包括C语言、高数、大学语文、汇编、中近史),根据输入信息计算各学生总分和平均分。若输入的学生学号已经存在,则输出”该学号已存在,无法操作!”,否则将学生信息插入到链表中,插入后链表中的数据依然按照学号排列。最后在DOS屏幕上打印出新的所有学生信息。5.5查询功能查询分为:精确查询、模糊查询精确查询:按姓名查询输入待查询的姓名;根据顺序查询的方法,对学生的姓名依次查询,直到查询到与输入的信息相匹配的信息,并在DOS屏幕上显示出来。若需要查询的信息不存在,系统则会提示找不到此人。可重复查询。按学号查询输入待查询的学号;根据顺序查询的方法,对学生的学号依次查询,直到查询到与输入的信息相匹配的信息,并在DOS屏幕显示出来。若需要查询的信息不存在,系统则会提示找不到此人。可重复查询。模糊查询:按姓氏查询输入待查询的姓氏;根据顺序查询的方法,对学生的姓依次查询,当查询到与输入的信息相匹配的信息,则在DOS屏幕显示出来,直到链表结束。若需要查询的信息不存在,系统则会提示找不到相关信息。可重复查询。按性别查询输入待查询的性别;根据顺序查询的方法,对学生的性别依次查询,当查询到与输入的信息相匹配的信息,则在DOS屏幕显示出来,直到链表结束。可重复查询。5.6删除功能在DOS屏幕上打印出当前的所有学生信息。(1)按姓名删除输入需要删除的学生姓名;根据顺序查询的方法,对学生的姓名依次查询,当查询到与输入的信息相匹配的信息,则删除该生信息,并在DOS屏幕显示出新的所有学生信息。若需要删除的信息不存在,系统则会提示删除失败。(2)按学号删除输入需要删除的学生学号;根据顺序查询的方法,对学生的学号依次查询,当查询到与输入的信息相匹配的信息,则删除该生信息,并在DOS屏幕显示出新的所有学生信息。若需要删除的信息不存在,系统则会提示删除失败。5.7排名功能可根据学生的总分进行排名,并在DOS屏幕上输出排名结果。5.8关于我们在DOS屏幕上输出系统相关信息。5.9软件说明5.10退出保存选择‘0’退出系统,保存功能在每段函数结束后实现。5.10运行结果5.10.0主界面5.10.1新建文件(输入一组数据,存入文件中)5.10.2打开文件(打开文件,读取文件数据存入链表)5.10.3修改功能5.10.4插入功能5.10.5查询功能精确查询-按姓名查询精确查询-按学号查询模糊查询-按姓氏查询模糊查询-按性别查询5.10.6删除功能按姓名删除按学号删除5.10.7总分排名功能5.10.9软件说明5.10.10退出保存保存功能在每段函数结束后实现。六、心得体会经过这次实验我们更好的掌握和巩固C语言编写的相关知识和技巧,特别是函数、指针、结构体、链表等功能。经过该课程设计的操作与实践,能够根据数据对象的特性,学会数据组织的方法,把现实世界中的实际问题在计算机内部表示出来,并培养基本的、良好的程序设计技能,虽然在设计过程中遇到了不少问题麻烦,在教材数据的帮助下,完成了这次程序设计。

七、源代码#include<stdlib.h>#include<stdio.h>#include<string.h>/*---------------------------------------------------------*/#defineLENsizeof(structstudent)//结构体长度/*---------------------------------------------------------*/#defineNEW(structstudent*)malloc(LEN)/*---------------------------------------------------------*/FILE*fp;/*文件指针*//*---------------------------------------------------------*/structstudent{ intnum;charname[20]; intscore1,score2,score3,score4,score5; charsex; doubleaver; floatsum;structstudent*next;};charfilename[100];structstudent*creat(){structstudent*h;structstudent*p,*q;printf("需要输入几条信息:");inti,n;scanf("%d",&n);printf("\n----------请按学号顺序依次输入学生信息----------\n");charc=getchar();h=NULL;for(i=1;i<=n;i++){p=NEW;if(p==NULL){printf("Allocationfailure\n");exit(0);} printf("\n"); printf("输入姓名<如:zhangsan>:");gets(p->name); printf("输入学号<如:1>:");scanf("%d",&p->num); c=getchar(); printf("输入性别<M/F>:"); scanf("%c",&p->sex); printf("输入c语言成绩:"); scanf("%d",&p->score1); printf("输入高数成绩:"); scanf("%d",&p->score2); printf("输入大学语文成绩:"); scanf("%d",&p->score3); printf("输入汇编语言成绩:"); scanf("%d",&p->score4); printf("输入中近史成绩:"); scanf("%d",&p->score5); c=getchar(); p->sum=p->score1+p->score2+p->score3+p->score4+p->score5; p->aver=(p->score1+p->score2+p->score3+p->score4+p->score5)/5.0;p->next=NULL;if(h==NULL)/*h为空,表示新结点为第一个结点*/h=p;/*头指针指向第一个结点*/else/*h不为空*/q->next=p;/*新结点与尾结点相连接*/q=p;/*使q指向新的尾结点*/ }returnh;}structstudent*paixu(structstudent*head)/*总分排名*/{system("cls");printf("总分排名如下:\n");structstudent*op;structstudent*p;structstudent*p1,*p2;p1=(structstudent*)malloc(LEN);p1->next=head;head=p1;for(op=NULL;op!=head;op=p){for(p=p1=head;p1->next->next!=op;p1=p1->next){if(p1->next->sum<p1->next->next->sum){p2=p1->next->next;p1->next->next=p2->next;p2->next=p1->next;p1->next=p2;p=p1->next->next;}}}p1=head;head=head->next;free(p1);p1=NULL;returnhead;}voidprlist(structstudent*head)/*输出函数*/{structstudent*p;p=head;printf("\n学号姓名性别c语言高数大学语文汇编语言中近史总分平均分\n");while(p!=NULL){printf("%d%s%c%d%d%d%d%d%.1f%.2f\n",p->num,p->name,p->sex,p->score1,p->score2,p->score3,p->score4,p->score5,p->sum,p->aver);p=p->next;}system("pause");}/*-------------------------------------write将数据存入文件-------------------------------------------*/voidwrite(structstudent*head){structstudent*p;p=head;if(head!=NULL){while(p!=NULL) { fwrite(p,LEN,1,fp); p=p->next; }} printf("文件更新成功!\n"); fclose(fp);system("pause"); system("cls");}/*-------------------------------------read将文件数据读入一个新链表中-------------------------------------------*/structstudent*read(void){structstudent*head;structstudent*p1,*p2;head=NULL; p1=NEW; rewind(fp);//指向文件头 fread(p1,LEN,1,fp);while(!feof(fp)){ if(head==NULL)head=p1;elsep2->next=p1;p2=p1; p1=NEW; fread(p1,LEN,1,fp); }p2->next=NULL; fclose(fp);return(head);}voidfind(structstudent*head)/*查询功能*/{intt,s,i,j;structstudent*p,*q;charx[10],y[2]={"0"},c[2];chark,f;p=head;printf("精确查找:\n*1按姓名查找\n*2按学号查找\n模糊查找\n*3按姓氏查找:\n*4按性别查找\n");scanf("%d",&s);k=getchar();if(s==1){printf("请输入姓名:");gets(x);while(p!=NULL){ if(strcmp(x,p->name)==0) {printf("\n学号姓名性别c语言高数大学语文汇编语言中近史总分平均分\n"); printf("%d%s%c%d%d%d%d%d%.1f%.2f\n",p->num,p->name,p->sex,p->score1,p->score2,p->score3,p->score4,p->score5,p->sum,p->aver); j=1;} elsei=1; q=p;p=p->next;}}elseif(s==2){printf("按学号查找:\n"); scanf("%d",&t); while(p!=NULL) { if(t==p->num) {printf("\n学号姓名性别c语言高数大学语文汇编语言中近史总分平均分\n"); printf("%d%s%c%d%d%d%d%d%.1f%.2f\n",p->num,p->name,p->sex,p->score1,p->score2,p->score3,p->score4,p->score5,p->sum,p->aver); j=1;} elsei=1; q=p;p=p->next;}}elseif(s==3){printf("按姓氏查询:\n");gets(c); while(p!=NULL) { if(strncmp(c,p->name,1)==0) {printf("\n学号姓名性别c语言高数大学语文汇编语言中近史总分平均分\n"); printf("%d%s%c%d%d%d%d%d%.1f%.2f\n",p->num,p->name,p->sex,p->score1,p->score2,p->score3,p->score4,p->score5,p->sum,p->aver); j=1;} elsei=1; q=p;p=p->next; }}elseif(s==4){printf("按性别查询:\n");f=getchar();while(p!=NULL){if(f==p->sex){printf("\n学号姓名性别c语言高数大学语文汇编语言中近史总分平均分\n"); printf("%d%s%c%d%d%d%d%d%.1f%.2f\n",p->num,p->name,p->sex,p->score1,p->score2,p->score3,p->score4,p->score5,p->sum,p->aver);j=1;}elsei=1; q=p;p=p->next;}}if(i=1&&j!=1) printf("Notfound.输入错误\n"); system("pause"); system("cls");}structstudent*delstudent(structstudent*head)/*删除功能*/{ints,n,m=1;charc; structstudent*p,*q;charx[10];while(m){printf("*1按学号删除\n*2按姓名删除\n"); scanf("%d",&s); c=getchar(); printf("已有信息如下:\n"); prlist(head);if(head==NULL){printf("Thisisaemptylist.");returnhead;}p=head;switch(s){case2: {printf("请输入姓名:");gets(x);while(strcmp(x,p->name)!=0&&p->next!=NULL){q=p;p=p->next;}if(strcmp(x,p->name)==0){if(p==head)head=p->next;elseq->next=p->next;free(p);}else{printf("Notfound.\n");continue;}};m=0;break; case1:{printf("请输入学号:");scanf("%d",&n);c=getchar();while(n!=p->num&&p->next!=NULL){q=p;p=p->next;}if(n==p->num){if(p==head)head=p->next;elseq->next=p->next;free(p);}else{printf("Notfound.\n");continue;}};m=0;break; default:printf("输入错误\n");break; }}returnhead;}voidabout()/*关于我们*/{system("cls"); printf("∩_∞,∩_∩\n\n"); printf("(●.●)(●﹏●)\n\n"); printf("/▓\/█\Hi\n\n"); printf("成员介绍\n\n"); printf("1.组长:\n\n"); printf("2.组员:\n\n"); printf("3.组员:\n\n"); printf("4.组员:\n\n"); printf("产品信息\n\n"); printf("一.产品用途:主要用于学生成绩管理与查询.\n\n"); printf("二.班级成绩管理系统主要包括:数据的录入\n\n"); printf("读取显示删除插入查找修改排名.\n\n"); system("pause"); system("cls"); }voidend()/*退出系统*/{ chars; printf("是否退出系统Y/N?\n"); scanf("%c",&s); if(s=='Y'||s=='y') exit(0); elseif(s=='N'||s=='n') return; else { printf("输入错误,请重新输入\n\n");system("pause");return; }}structstudent*insert(structstudent*head,structstudent*op)/*插入功能*/{structstudent*p,*q;if(head==NULL){head=op;/*空表时,插入结点*/op->next=NULL;}else{p=head;while(op->num>p->num&&p->next!=NULL){q=p;p=q->next;}if(op->num==p->num){ printf("\n该学号已存在,无法插入!\n"); returnhead;}elseif(op->num<p->num){if(p==head)head=op;/*在表头插入结点*/elseq->next=op;/*在表中间插入结点*/op->next=p;}else{p->next=op;/*在表尾插入结点*/op->next=NULL;}}returnhead;}structstudent*xiugai(structstudent*head)/*修改功能*/{ structstudent*op=NEW; intc; head=delstudent(head); printf("请输入新名字:"); gets(op->name); printf("请输入新学号:"); scanf("%d",&op->num); c=getchar(); printf("请输入新性别:"); scanf("%c",&op->sex);printf("请输入新C语言成绩:");scanf("%d",&op->score1);printf("请输入新高数成绩:");scanf("%d",&op->score2);printf("请输入新大学语文成绩:");scanf("%d",&op->score3); printf("请输入新汇编成绩:");scanf("%d",&op->score4); printf("请输入新中近史成绩:");scanf("%d",&op->score5); c=getchar(); op->sum=op->score1+op->score2+op->score3+op->score4+op->score5; op->aver=(op->score1+op->score2+op->score3+op->score4+op->score5)/5.0;op->next=NULL;head=insert(head,op); returnhead;}structstudent*ca(structstudent*head)/*插入功能*/{structstudent*op=NEW;charc;printf("请输入名字:"); gets(op->name); printf("请输入学号:"); scanf("%d",&op->num); c=getchar();printf("请输入性别:"); scanf("%c",&op->sex);printf("请输入C语言成绩:");scanf("%d",&op->score1);printf("请输入高数成绩:");scanf("%d",&op->score2);printf("请输入大学语文成绩:");scanf("%d",&op->score3); printf("请输入汇编成绩:");scanf("%d",&op->score4); printf("请输入中近史成绩:");scanf("%d",&op->score5); c=getchar();op->next=NULL;head=insert(head,op);op->sum=op->score1+op->score2+op->score3+op->score4+op->score5; op->aver=(op->score1+op->score2+op->score3+op->score4+op->score5)/5.0; returnhead;}voidhelp()/*软件说明*/{system("cls"); printf("\n说明\n\n\n"); printf("运行本软件需先使用新建文件或打开文件功能,否则运行出错。\n");printf("每次使用修改插入删除等功能后需重新打开文件读取数据,\n"); printf("否则得到的数据是未保存的。每运行完一个功能会自动返回到\n"); printf("主界面。\n\n\n"); printf("\n\n 纯属原创禁止抄袭\n\n");system("pause"); system("cls");}/*-------------------主函数菜单--------------------------------------*/intmain(){system("color9f"); charc,r; structstudent*head; intz; while(1) { printf("\n"); printf("········╔------------------------╗········\n\n"); printf("········欢迎使用学生成绩管理系统········\n\n"); printf("········╚------------------------╝········\n\n"); printf("***********************************菜单***********************************\n\n"); printf("==========================================================================\n\n"); printf("*******1.新建文件*****2.打开文件*******"); printf("\n\n"); printf("*******3.修改功能*****4.插入功能*******"); printf("\n\n"); printf("*******5.查询功能*****6.删除功能*******"); printf("\n\n"); printf("*******7.排名功能*****8.关于我们*******"); printf("

温馨提示

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

评论

0/150

提交评论