《C语言课程设计报告-学生成绩管理系统.docx》由会员分享,可在线阅读,更多相关《C语言课程设计报告-学生成绩管理系统.docx(20页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 高级语言程序设计课程设计报告书设 计 题 目:学生信息管理系统指 导 老 师:张俊峰、陈红军学 生 学 号:学 生 姓 名:李磊同 组 人 员:乔心成、陈兆提时 间:2015年06月25日目录摘要21系统名称及其说明32实验目的33系统开发环境43.1开发人员43.2开发时间43.3开发环境43.4结构图43.5程序运行结果64 系统代码结构75系统开发进程186总结心得体会18摘要随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施技术已逐步成熟。管理信息系统是一个不断发展的新兴学科,任何一个单位要生存发展要高效的把内部活动有机的组织起来。就必须建立与其自身特点相适应的管理系统。
2、本文介绍了在Visul C+6.0环境下来开发一个学生信息管理系统的大致过程。1系统名称及其说明系统名称:学生信息管理系统( student information management system )学生信息包括:学号,姓名,年龄,性别,成绩等。设计学生信息管理系统,使之能提供以下几项功能:1.系统以菜单方式工作。2.学生信息录入功能输入。3.学生信息浏览功能输出。4.学生信息查询功能算法。按学号查询。按姓名查询。5.学生信息的删除与修改。2实验目的通过此次C语言课程设计实验,让我们更加熟练地掌握C语言这一门计算机编程语言,能够根据其语言的基本数据结构构成来完成与之相关的语言功能,初步形成
3、并加深自我编程思想,形成能够独立编程的能力,对于程序设计语言的学习目的,可以概括为学习语法规定、掌握程序设计方法、提高程序开发能力。3系统开发环境3.1开发人员组长:李磊。成员:乔心成,陈兆提,李磊。3.2开发时间第十六周和第十七周(两周)。3.3开发环境Visul c+6.0机型: 方正电脑 处理器名称:Intel(R)Core(TM)2 Duo CPU E7200 2.53GHz 硬盘驱动器:WDC WD1600AAJS-22WAAO 系统内存:金士顿内存2GB 显示卡:NVIDIA GeFORCE 9400 GT 显示器:方正科技FG981-W9操作系统: Microsoft Windo
4、ws XP Professional3.4结构图学生信息管理系统进入系统菜单保存资料查询资料登记资料删除资料修改资料方式1学号2姓名1学号 2姓名3性别4成绩退出系统3.5程序运行结果4 系统代码结构#include (头文件)#include #include int shoudsave=0; /* */struct student (系统结构) char num10;/* 学号 */ char name20;/*姓名*/ char sex4; /*性别*/int cgrade; /*C语言成绩*/int mgrade; /*高数成绩*/int egrade; /*英语成绩*/int tot
5、le; /*总成绩*/int ave; /*平均成绩*/char neartime10;/* 最近更新时间 */ ; typedef struct node struct student data; struct node *next; Node,*Link; /*链表*/void menu() (菜单) printf(*); printf(t1登记学生资料ttttt2删除学生资料n); printf(t3查询学生资料ttttt4修改学生资料n); printf(t5保存学生资料ttttt0退出系统n); printf(*n); void printstart() printf(-n); /*
6、打印星号*/ void Wrong() printf(n=提示:输入错误!n); void Nofind() printf(n=提示:没有找到该学生!n); void printc() /* 本函数用于输出中文 */ printf( 学号t 姓名 性别 英语成绩 数学成绩 C语言成绩 总分 平均分n); void printe(Node *p)/* 本函数用于输出英文 */ printf(%-12s%st%st%dt%dt%dt %dt %dn,p-data.num,p-data.name,p-data.sex,p-data.egrade,p-data.mgrade,p-data.cgrade
7、,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 r; r=r-next; else if(strcmp(nameornum,name)=0) /* 按姓名查询 */ r=l-next; while(r!
8、=NULL) if(strcmp(r-data.name,findmess)=0) return r; r=r-next; return 0; void Add(Link l) /* 增加学生 */ Node *p,*r,*s; char num10; r=l; s=l-next; while(r-next!=NULL) r=r-next; /* 将指针置于最末尾 */ while(1) /*while语句的原型是while(表达式)语句,当表达式为非0值时,执行while语句中的嵌套语句。那么while(1)其中1代表一个常量表达式,他永远不会等于0。所以,循环会一直执行下去。除非你设置br
9、eak等类似的跳出循环语句循环才会中止*/ printf(请你输入学号(以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); strcpy(p-data.num
10、,num); printf(请你输入姓名:); scanf(%s,p-data.name); 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-data.totle=p-data.egr
11、ade+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) printf(n=提示:没有资料可以查询!n); return; printf(n=1按学号查找n=2按姓名查找n); scanf(%d,&sel); if(sel=1)/* 学号 */ printf(请你
12、输入要查找的学号:); 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(); printc(); printe(p); p
13、rintstart(); 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; while(r-next!
14、=p) r=r-next; r-next=p-next; free(p); printf(n=提示:该学生已经成功删除!n); 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=提示:该学生已经成功删除!n); shoudsave=1; else Nofind(); else Wron
15、g(); void Modify(Link l)(修改) Node *p; char findmess20; if(!l-next) printf(n=提示:没有资料可以修改!n); return; printf(请你输入要修改的学生学号:); scanf(%s,findmess); p=Locate(l,findmess,num); if(p) printf(请你输入新学号(原来是%s):,p-data.num); scanf(%s,p-data.num); printf(请你输入新姓名(原来是%s):,p-data.name); scanf(%s,p-data.name); getchar
16、(); 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(请你输入新的英语成绩(原来是%d分):,p-data.egrade); scanf(%d,&p-data.egrade); p-data.t
17、otle=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(tttt显示结果n); printstart(); printc(); printf(n); while(p) printe(p); p=p-n
18、ext; 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.mgrade=pm-data.mgrade) pm=r; if(r-data.egrade=pe-data.egrade) p
19、e=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.name,pt-data.totle); printf(平均分最高者:t%s %d分n,pa-data.name,pa-data.ave); printf(英语最高者:t%s %d分n,pe-data.name,pe-data.egrade); printf(数学最高者:t%s %d分n,pm-data.name,pm-data.mg
20、rade); printf(c语言最高者:t%s %d分n,pc-data.name,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; while(p) s=(Node*)malloc(sizeof(Node); /* 新建接点用于保存信息 */ s-dat
21、a=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 *p; int flag=1,count=0; fp=fopen(c:student,wb);
22、 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 main() (主函数 ) Link l;/* 连表 */ FILE *fp; /* 文件指针 */ int sel; char ch; char jian
23、; int count=0; Node *p,*r; printf(tttt学生成绩管理系统ntttt-河南城建学院-信息管理与信息专业-李磊-陈兆提-乔心成制作n); l=(Node*)malloc(sizeof(Node); (文件)l-next=NULL; r=l; fp=fopen(C:student,rb); if(fp=NULL) printf(n=提示:文件还不存在,是否创建?(y/n)n); scanf(%c,&jian); if(jian=y|jian=Y) fp=fopen(C:student,wb); else exit(0); printf(n=提示:文件已经打开,正在
24、导入记录.n); while(!feof(fp) p=(Node*)malloc(sizeof(Node); if(fread(p,sizeof(Node),1,fp) /* 将文件的内容放入接点中 */ p-next=NULL; r-next=p; r=p; /* 将该接点挂入连中 */ count+; fclose(fp); /* 关闭文件 */ printf(n=提示:记录导入完毕,共导入%d条记录.n,count); while(1) menu(); printf(请你选择操作:); scanf(%d,&sel); if(sel=0) if(shoudsave=1) getchar()
25、; printf(n=提示:资料已经改动,是否将改动保存到文件中(y/n)?n); scanf(%c,&ch); if(ch=y|ch=Y) Save(l); printf(n=提示:你已经退出系统,再见!n); break; switch(sel) case 1:Add(l);break; /* 增加学生 */ case 2:Del(l);break;/* 删除学生 */ case 3:Qur(l);break;/* 查询学生 */ case 4:Modify(l);break;/* 修改学生 */ case 5:Save(l);break;/* 保存学生 */ case 9:printf(
26、ttt=帮助信息=n);break; default: Wrong();getchar();break; 5系统开发进程1.进行初步系统分析,讨论分析开发所需的C语言知识,并整理相关高级技术的相关知识。2.详细分析系统,划分系统模块,分配开发任务。3.开始函数编写,初步完界面及其菜单的编写及其用户功能模块,并实现创建用户成功。4.基本完成系统所需的所有函数的编写,代码的最后整合和测试修改。5.程序运行结果。6.开始撰写设计报告。6总结心得体会在科技高度发达的今天,计算机在人们之中的作用越来越突出。c语言作为一种计算机的语言,我们学习它,有助于我们更好的了解计算机,与计算机进行交流,因此,c语言
27、的学习对我们尤其重要。 在这两个星期里,我们在专业老师的带领下进行了c语言程序课程设计学习。在这之前,我们已经对c语言这门课程学习了一个学期,对其有了一定的了解,但是也仅仅是停留在了解的范围,对里面的好多东西还是很陌生,的在运用起来的时候还是感到很力不从心。 上机实验是学习程序设计语言必不可少的实践环节,特别是c语言灵活、简洁,更需要通过编程的实践来真正掌握它。,这些都必须通过充分的实际上机操作才能完成。课程上机实验的目的,不仅仅是验证教材和讲课的内容、检查自己所编的程序是否正确,课程安排的上机实验的目的可以概括为方面:1加深对课堂讲授内容的理解 课堂上要讲授许多关于c语言的语法规则,听起来十
28、分枯燥无味,也不容易记住,死记硬背是不可取的。然而要使用c语言这个工具解决实际问题,又必须掌握它。通过多次上机练习,对于语法知识有了感性的认识,加深对它的理解,在理解的基础上就会自然而然地掌握c语言的语法规定。 学习c语言不能停留在学习它的语法规则,而是利用学到的知识编写c语言程序,解决实际问题。即把c语言作为工具,描述解决实际问题的步骤,由计算机帮助我们解题。只有通过上机才能检验自己是否掌握c语言、自己编写的程序是否能够正确地解题。 通过上机实验来验证自己编制的程序是否正确,恐怕是大多数同学在完成老师作业时的心态。但是在程序设计领域里这是一定要克服的传统的、错误的想法。因为在这种思想支配下,
29、可能你会想办法去掩盖程序中的错误,而不是尽可能多地发现程序中存在的问题。自己编好程序上机调试运行时,可能有很多你想不到的情况发生,通过解决这些问题,可以逐步提高自己对c语言的理解和程序开发能力。2熟悉程序开发环境、学习计算机系统的操作方法 一个c语言程序从编辑、编译、连接到运行,都要在一定的外部操作环境下才能进行。所谓环境就是所用的计算机系统硬件、软件条件,只有学会使用这些环境,才能进行程序开发工作。通过上机实验,熟练地掌握c语言开发环境,为以后真正编写计算机程序解决实际问题打下基础。同时,在今后遇到其它开发环境时就会触类旁通,很快掌握新系统的使用。3学习上机调试程序 完成程序的编写,决不意味着万事大吉。你认为万无一失的程序,实际上机运行时可能不断出现麻烦。如编译程序检测出一大堆错误。有时程序本身不存在语法错误,也能够顺利运行,但是运行结果显然是错误的。开发环境所提供的编译系统无法发现这种程序逻辑错误,只能靠自己的上机经验分析判断错误所在。有时候一个消耗你几个小时时间的小小错误,调试高手一眼就看出错误所在。 通过这次为数不多的几天计算机实践学习,我们了解了一些关于c语言的知识,理解巩固了我们c语言的理论知识,对我们将来到社会工作将会有莫大的帮助。同时它让我知道,只要你努力,任何东西都不会太难。 卖洋芋