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

下载本文档

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

文档简介

1、C语言可视化程序设计报告行政班级 机械0805 姓名 魏永涛 学号 0806080524 指导老师 夏建芳课题名称 学生成绩管理系统C可视化程序设计报告一.设计题目学生成绩管理系统二、课题的任务:1、 所有记录保存在一个数据文件中;2、 具备记录添加功能;3、 查询功能(如按学号查询成绩等);4、 计算统计功能(如统计某门课程的平均程序);5、 排序功能(如按成绩排序);6、 统计并显示信息功能;三课程设计目的了解软件工程中的一些系统分析,模块分析,代码设计的概念,利用visual c+实现学生成绩管理系统的录入、查询、删除、统计等基本操作,掌握C语言中的结构体、指针、函数(系统函数、自定义函

2、数)、文件操作等知识。通过对系统的分析和设计,进一步巩固C语言的学习,以提高对开发环境。四、成员承担的任务:(组长)魏永涛:完成下面子程序的编写:a:主函数的编译b:定位指针的Locate()函数的编译,与调试。c:主菜单函数的编译,及其它外部函数的编译,与调试。d: 任务分配,规定变量符号,及变量的初始化。e:程序的组装及调试。王栋 :完成下面子程序的编写: a:统计数据函数的编译。 b::查找学生记录函数的编译。 c:增加学生记录的函数的编译。 王义: 完成下面子程序的编写:a:删除函数的编译b:修改函数的编译c:排序函数的编译巫培宇 :完成下面子程序的编写:a:显示函数的编译。b:欢迎界

3、面的制作。c:保存函数的编译五、程序流程图1.系统总体结构图保存学生资料排序学生资料统计学生资料件显示学生资料录修改学生资料录查询学生资料录删除学生资料录创建文件输入学生资料主程序获取帮组信息退出管理系统2.main()函数流程图100I=(Node*)malloc(sizeof(Node)I-next=NULL;r=I;fp=fopen(“C:student”,”rb”)fp=NULL无文件,创建?fp=fopen(“C:student”,”rb”)Exitmain()开始导入文件!feof(fp)p=(Node*)malloc(sizef(Node)fread(p,sizeof(Node)

4、,1,fp)P-next=NULL;r-next=p;R=p;count+fclose(fp)menu()1234576980非0YN假真假真3.Add函数流程图1入口r-next不为空指针后移到表尾?1=0?输出提示输入numS指针为空?s-data.num=num相关输出指针后移到表尾申请空间Anum=0NOYESNONOYESYESYESYESNOYESNOYESNOYESNO输出提示语输入对应信息计算总分和平均分指针移到表尾结束Strcpy(p-data.num,num)A4.Del函数流程图NoYes2入口输入要删除的学号有此学号?结束学生不存在输出找到的学生信息删除该学生信息5.Q

5、ur函数流程图3入口!l-next输出提示语输入selsel=11输出提示语输入学号定为结点指针为空输出成绩sel=22输出提示语输入姓名定为结点指针为空输出成绩输出提示语BB结束NOYESYESNOYESNONOYESYESNO6.Modify函数流程图NoYes4入口输入要修改的学号有此学号?结束输出学生不存在输出找到的学生信息输入新的学生相关信息7.Disp函数流程图结束!p没有可供现实的数据显示已有信息P调用printc函数p=p-next打出星号假真0非058.Tongji函数流程图6入口!l pm=pe=pc=pt=pa=rr!=NULL找到各量最大值指针后移到表尾?“输出各统计结

6、果结束输出提示语YESNONOYES9.Sort函数流程图7入 口分数比较排序点值小排序点值大后移排在首位插入中间位置到表尾?记录名次结 束NoYesNoYes10.Save函数流程图8fp=fopen(“c:student”,”rb”)fp=NULL文件打开错误退出p=I-nextpFwrite(p,sizeof(Node),1,fp)=1p=p-nextcount+flog=0flog保存成功shoudsave=0fclose(fp)假真0非0真假0非0返回menu11.locate函数流程图10Strcmp(nameornum,num)=0r=Inextr!=NULL Strcmp(r-

7、data.num,findmess)=0return rr=rnextStrcmp(nameornum,name)=0r=Inextr!=NULL Strcmp(r-data.num,findmess)=0return rr=rnext返回一个地址或0假真0非0假真假真0非0假真六.系统实际运行效果1. 欢迎界面2. 主菜单3. 输入学生资料4.删除学生资料8.保存4. 查询5.修改6.显示7.统计8.排序9.排序结果10.帮助11.退出七.系统源代码#include stdio.h #include stdlib.h #include string.h int shoudsave=0; /定

8、义一个全局变量 struct student char num11;/学号 char name20;/姓名 char sex4; /性别 int cgrade; /c语言成绩 int mgrade; /数学成绩 int egrade; /英语成绩 int totle; /总分 int ave; /平均分 char neartime10;/最近更新时间 ; typedef struct node /声明新的结构体类型Node struct student data; struct node *next; Node,*Link; void welcome()/欢迎界面 printf( *n); p

9、rintf( *欢 迎 使 用*n); printf( *中南大学学生成绩管理系统 *n); printf( *n); printf( 本系统由中南大学机械0805班梦幻小组nttt倾情奉献n); printf(n); printf( 愿我们的努力n); printf( 能为您的学习工作带来方便n); printf( 您的支持将是我们不断创新的动力n); void menu() /主菜单 printf(t*n); printf(t* MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM *n); printf(t* MMMMMMMM

10、MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM *n); printf(t* MMM 1 2 MMM *n); printf(t* MMM 3 4 MMM *n); printf(t* MMM 5 6 MMM *n); printf(t* MMM 7 8 MMM *n); printf(t* MMM 9 0 MMM *n); printf(t* MMM MMM *n); printf(t* MMM MMM *n); printf(t* MMM * MMM *n); printf(t* MMM i 欢迎使用中南大学学生成绩管理系统i MMM *

11、n); printf(t* MMM * MMM *n); printf(t* MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM *n); printf(t* MMM 出品人:梦幻小组 | 辅导老师:夏建芳 MMM *n); printf(t* MMM 组长:魏永涛 | 梦幻组合 MMM *n); printf(t* MMM 组员:王栋 王义 巫培宇| 成就梦幻品质 MMM *n); printf(t* MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM *n); p

12、rintf(t*n); void printstart() printf(-n); void Wrong() printf(n对不起!你输入的信息有误!请重新输入!n); void Nofind() printf( _n); printf(nt!提示:没有找到该学生!n); printf( _n); printf(n); void printc() / 本函数用于输出中文 printf( 学号t 姓名 性别 英语 数学 C语言 总分 平均分n); void printe(Node *p)/本函数用于输出英文 printf(%-12s%st%st%dt %dt %dt %dt %dn,p-dat

13、a.num,,p-data.sex,p-data.egrade,p-data.mgrade,p-data.cgrade,p-data.totle,p-data.ave);/输出成绩 Node* Locate(Link l,char findmess,char nameornum) /该函数用于定位链表中符合要求的接点,并返回该指针 Node *r; if(strcmp(nameornum,num)=0) /按学号查询 r=l-next; while(r!=NULL) if(strcmp(r-data.num,findmess)=0)/将输入学号与已有学号对比 return

14、 r; /返回地址 r=r-next; else if(strcmp(nameornum,name)=0) /按姓名查询将输入姓名与已有姓名对比 r=l-next; while(r!=NULL) if(strcmp(,findmess)=0) return r; /返回地址 r=r-next; return 0; void Add(Link l) /增加学生 Node *p,*r,*s; /定义Node型指针 char num11; r=l; s=l-next; while(r-next!=NULL) r=r-next; /将指针置于最末尾 while(1) printf

15、(请您输入学号(以0返回上一级菜单:); scanf(%s,num); if(strcmp(num,0)=0) break; while(s) if(strcmp(s-data.num,num)=0)/将新输入学号与已有学号对比 printf(!提示:学号为%s的学生已经存在,若要修改请你选择4 修改!n,num); printstart(); printc(); printe(s); printstart(); printf(n); return; s=s-next;/指向下一个地址 p=(Node *)malloc(sizeof(Node);/在内存中分配长度与node相同的连续空间用于存

16、储新数据 strcpy(p-data.num,num); printf(请你输入姓名:); scanf(%s,); getchar(); printf(请你输入性别:); scanf(%s,p-data.sex); getchar(); printf(请你输入c语言成绩:); scanf(%d,&p-data.cgrade); getchar(); printf(请你输入数学成绩:); scanf(%d,&p-data.mgrade); getchar(); printf(请你输入英语成绩:); scanf(%d,&p-data.egrade); getchar(); p

17、-data.totle=p-data.egrade+p-data.cgrade+p-data.mgrade; /求总分 p-data.ave=p-data.totle / 3;/信息输入已经完成 p-next=NULL; r-next=p; r=p; shoudsave=1; void Qur(Link l) /查询学生 int sel; char findmess20; Node *p; if(!l-next)/当l-next=NULL时成立 printf(n*提示:没有资料可以查询!n); return; printf(n*1按学号查找n*2按姓名查找n); scanf(%d,&sel);

18、 if(sel=1)/学号 printf(请你输入要查找的学号:); scanf(%s,findmess); p=Locate(l,findmess,num); if(p) printf(tttt查找结果n); printstart(); printc(); printe(p); printstart(); else Nofind(); else if(sel=2) /姓名 printf(请你输入要查找的姓名:); scanf(%s,findmess); p=Locate(l,findmess,name); if(p) printf(tttt查找结果n); printstart(); prin

19、tc(); printe(p); printstart(); else Nofind(); else Wrong(); void Del(Link l) /删除函数 int sel; Node *p,*r; char findmess20; if(!l-next) printf(n*提示:没有资料可以删除!n); return; printf(n*1按学号删除n*2按姓名删除n); scanf(%d,&sel); if(sel=1) printf(请你输入要删除的学号:); scanf(%s,findmess); p=Locate(l,findmess,num); if(p) r=l; whi

20、le(r-next!=p) r=r-next; r-next=p-next; free(p); printf(n*提示:该学生已经成功删除!n); printf(tttt请按任意键返回。n); getchar(); shoudsave=1; else Nofind(); else if(sel=2) printf(请你输入要删除的姓名:); scanf(%s,findmess); p=Locate(l,findmess,name); if(p) r=l; while(r-next!=p) r=r-next; r-next=p-next; free(p); printf(n*提示:该学生已经成功

21、删除!n); shoudsave=1; else Nofind(); else Wrong(); void Modify(Link l) /修改函数模块 Node *p; char findmess20; if(!l-next) printf(n*提示:没有资料可以修改!n); return; printf(请你输入要修改的学生学号:); scanf(%s,findmess); p=Locate(l,findmess,num); void printstart1(); if(p) printf(请你输入新学号(原来是%s):,p-data.num); scanf(%s,p-data.num);

22、 printf(请你输入新姓名(原来是%s):,); scanf(%s,); getchar(); printf(请你输入新性别(原来是%s):,p-data.sex); scanf(%s,p-data.sex); printf(请你输入新的c语言成绩(原来是%d分):,p-data.cgrade); scanf(%d,&p-data.cgrade); getchar(); printf(请你输入新的数学成绩(原来是%d分):,p-data.mgrade); scanf(%d,&p-data.mgrade); getchar(); printf(请你

23、输入新的英语成绩(原来是%d分):,p-data.egrade); scanf(%d,&p-data.egrade); p-data.totle=p-data.egrade+p-data.cgrade+p-data.mgrade; p-data.ave=p-data.totle/3; printf(n*提示:资料修改成功!n); shoudsave=1; else Nofind(); void Disp(Link l)/显示函数模块 int count=0; Node *p; p=l-next; if(!p) printf(n*提示:没有资料可以显示!n); return; printf(tt

24、tt显示结果n); printstart(); printc(); printf(n); while(p) printe(p); p=p-next; printstart(); printf(n); void Tongji(Link l) Node *pm,*pe,*pc,*pt,*pa; /用于指向分数最高的接点 Node *r=l-next; if(!r) printf(n*提示:没有资料可以统计!n); return ; pm=pe=pc=pt=pa=r; while(r!=NULL) if(r-data.cgrade=pc-data.cgrade) pc=r; if(r-data.mg

25、rade=pm-data.mgrade) pm=r; if(r-data.egrade=pe-data.egrade) pe=r; if(r-data.totle=pt-data.totle) pt=r; if(r-data.ave=pa-data.ave) pa=r; r=r-next; printf(-统计结果-n); printf(*总分最高者:t%s %d分n,,pt-data.totle); printf(*平均分最高者:t%s %d分n,,pa-data.ave); printf(*英语最高者:t%s %d分n,pe-data.nam

26、e,pe-data.egrade); printf(*数学最高者:t%s %d分n,,pm-data.mgrade); printf(*c语言最高者:t%s %d分n,,pc-data.cgrade); printstart(); void Sort(Link l) Link ll; Node *p,*rr,*s; ll=(Link)malloc(sizeof(Node); /用于做新的连表 ll-next=NULL; if(l-next=NULL) printf(n*提示:没有资料可以排序!n); return ; p=l-next; whil

27、e(p) s=(Node*)malloc(sizeof(Node); /新建接点用于保存信息 s-data=p-data; s-next=NULL; rr=ll; while(rr-next!=NULL & rr-next-data.totle=p-data.totle) rr=rr-next; if(rr-next=NULL) rr-next=s; else s-next=rr-next; rr-next=s; p=p-next; free(l); l-next=ll-next; printf(n*提示:排序已经完成!n); void Save(Link l) FILE* fp; Node

28、*p; int flag=1,count=0; fp=fopen(c:student,wb); if(fp=NULL) printf(n*提示:重新打开文件时发生错误!n); exit(1); p=l-next; while(p) if(fwrite(p,sizeof(Node),1,fp)=1) p=p-next; count+; else flag=0; break; if(flag) printf(n*提示:文件保存成功.(有%d条记录已经保存.)n,count); shoudsave=0; fclose(fp); void help() printf(欢迎进入中南大学学生成绩管理系统菜

29、单导航ntt我们将竭诚为您服务n); printf(以下是各菜单功能简介:); printf(1.:此功能用于录入新生学号,性别,及各科成绩。n); printf(2.:用于注销离校学生资料。n); printf(3.:此功能下设两个选项,分别用于学号查询和姓名查询。n); printf(4.;用来改动已录入的学生信息。n); printf(5.:用来显示所有学生信息。n); printf(6.:选出总成绩第一,及单科第一的学生n); printf(7.:用来对学生成绩进行排序,但不显示。n); printf(8.:用于存储新录入的学生信息,在每次操作最后必须保存。n); printf(如您人有疑问请联系我们); printf(tttt请按任意键返回。n); getchar(); void main() Link l;/链表 FILE *fp; /文件指针 int sel; char ch; char jian; int count=0; Node *p,*r; welcome(); p

温馨提示

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

评论

0/150

提交评论