C语言课程设计报告书张杉.docx
- 文档编号:28592468
- 上传时间:2023-07-19
- 格式:DOCX
- 页数:22
- 大小:21.02KB
C语言课程设计报告书张杉.docx
《C语言课程设计报告书张杉.docx》由会员分享,可在线阅读,更多相关《C语言课程设计报告书张杉.docx(22页珍藏版)》请在冰豆网上搜索。
C语言课程设计报告书张杉
西安郵電學院
高级语言课程设计报告书
系部名称
电信系
学生姓名
张杉
专业名称
电子信息工程
班级
电子0701
学号
指导教师
衡霞
时间
2008年06月09日至
2008年06月20日
实验题目学生成绩管理系统
一、实验目的:
(1)本课程设计为学生提供了一个既动手又动脑,自学,查资料,独立实践的机会。
将本学期课本上的理论知识和实际有机的结合起来,锻炼学生实际分析问题和解决问题的能力,提高学生适应实际、实践编程的能力,使对C语言系统编程有一个大致的了解。
(2)C语言的实践。
掌握C语言函数的定义方法,函数的声明及函数的调用过程。
掌握结构体类型变量的定义和使用,综合应用C语言的知识,实现一个完整的系统,提高编程能力,体会软件程序的开发过程。
二、实验内容:
(1)运用结构体数组编辑一个简单的学生成绩管理系统,使之能够完成学生成绩的创建、添加,查询、修改,删除、统计、排序等操作,并对文件进行保存和读取。
(2)执行编译操作,并根据提示调试此程序,排除所有的错误和警告。
直到编译成功为止。
(3)执行运行操作,逐一对每个模块进行调试。
直到全部程序运行成功为止。
(4)请老师检查,向老师演练此程序,并能回答老师提出的相关问题。
三、需求分析:
(1)根据学生成绩管理的需要,建立一个“学生信息管理系统”,系统具有输入、查询、修改、删除、统计、排序等基本功能;以方便对成绩的各项管理操作。
每一条记录包括一个学生的学号、姓名、性别,年龄,生日,成绩。
系统的各个功能模块都用函数的形式来实现;可以将学生成绩信息保存在文件中,并从文件中读取出来。
有一个清晰美观界面来调用各个功能。
本程序是由C语言的基本单位—函数来设计实现与其功能的多次使用函数调用以及函数的嵌套调用。
本程序分为7个模块,分别为创建学生资料;添加学生的资料;查询学生的成绩;修改学生的资料;删除学生的资料;统计学生的成绩;对学生的资料进行排序。
本程序可以处理多个学生的成绩的输入、添加、修改、排序等问题。
本程序的使用特别方便,每做完一个模块,下面都有提示信息。
使用环境为Win-Tc。
(2)创建该学生成绩管理系统目的就是能够对学生基本信息进行创建、追加、查询、修改、删除、统计、排序等功能,这样可以简化许多人工做起来很复杂的问题。
譬如:
“排序”,有了此程序只需将信息输入,计算机就可自动执行,省时、省力。
另外,它还可以重复使用,方便、快捷。
(3)该学生基本信息管理系统是在WIN-TC中文简体环境下运行。
该系统要测试的数据如下:
1.输入模块:
(输入5个学生的信息)
Numbernamesexagebirthdayscore
1am2060
2bm2070
3cf2080
2.追加模块:
(再加1个信息)
4df2090
3.查询模块:
(查询GULI的基本信息)
1(按学号即可查询)或a(按姓名也可查询)
4.修改模块:
(修改b的成绩)
(输入)1(修改number)(输入)2(修改name)(输入)3(修改sex)(输入)4(修改age)(输入)5(修改birthday)(输入)6(修改score)
5.删除模块:
(删除c的基本信息):
06(输入学号即可删除)
6.统计模块:
可统计各分数的人数。
7.排序模块:
按成绩进行排序。
四、概要设计
(1)主函数结构图:
(2)数据类型:
结构体类型
structdate/*结构体类型*/
{intyear;/*结构体变量,用来定义生日中的年*/
……};
structstudent_type/*结构体类型*/
{intnum;/*结构体变量,用来定义学号*/
charname[10];/*结构体数组,用来定义姓名*/
……
structdatebirth;/*结构体中的结构体*/
};
(3)模块功能详细说明:
1.录入模块:
此模块可以连续输入20个学生的资料,若学生数少于20,则可以在输入学号处输入0便可退出此模块,并把输入的信息保存到e:
\\score.txt文件中。
2.输出模块:
此模块分两页输出二十名同学的信息。
3.添加模块:
输入要添加的学生信息。
4.删除模块:
输入要删除的同学学号,然后删除。
5.查询模块:
此模块中使用者可以用三种方式查询学生成绩。
分别为
(1)按学号查询
(2)按姓名查询。
6.修改模块:
此模块中可以修改一门科的成绩也可以同时修改四门科的成绩。
修改完毕后输入y可以继续修改,输入n则退出此模块。
7.删除模块:
此模块中用到的删除原理为覆盖要删除的学生的资料。
过程简述,先输入要删除的学生的学号,系统找到此学生的信息后给它复制下一个学生的信息,给下一个学生的纪录复制下下一个学生的信息,一直到最后一个学生的信息复制给倒数第二个学生的信息为止。
然后文件中的学生总数减一。
8.统计模块:
统计一个分数的人数。
9.排序模块:
此模块用的方法为冒泡法。
五、详细设计及运行结果
(1)各个模块的程序流程图加模块:
添加模块:
删除模块:
排序模块:
(2)函数之间相互调用的图示:
(3)主要函数之间相互调用如下:
六、调试情况,设计技巧及体会
1.测试数据:
输入合法数据
输入非法数据
Numnamesexagebirthdayscore
1Am2050
2Bf2160
3Cm2070
程序显示出现错误,不能正常输入
2.调试情况:
(1).刚开始时,输入的成绩不能保存在文件中,所有数据都是一次性的。
后来知道是没在主程序中加保存模块,添加后就可以了。
但调试中又发现在添加模块中加入数据还是不能保存,在老师的帮助下发现问题出现在sum值上,我的添加后sum值不变,导致天价的数据不能保存。
我在程序中加了sum++;使每次添加数据后,sum也随之添加。
问题就解决了。
(2).删除模块是最头疼的,调试了n多次才成功,问题也出现在sum值上。
(3).其他问题也就在粗心或者简单的错误,印象不是很深刻。
3.自我评价:
在没有输入任何信息的情况下,不能执行查询、修改、删除、统计、排序功能。
本程序是由C语言的基本单位—函数来设计实现与其功能的多次使用函数调用以及函数的嵌套调用。
本程序分为8个模块,分别为
(1)录入学生资料。
((3)添加学生的资料(4)查询学生的成绩(5)修改学生的资料(6)删除学生的资料(7)统计学生的成绩(8)对学生的资料进行排序。
本程序可以处理多个学生的成绩的输入、添加、修改、排序等问题。
本程序的使用特别方便,每做完一个模块,下面都有提示信息。
使用环境为Win-Tc。
此程序的不足之处在学生基本信息方面还不够完善,另一方面就是在运行此程序时,需要执行操作的提示语不够具体和完善.
改进方法:
可以在学生基本信息的结构体中添加更多的学生信息,使得学生信息更加完善,此外,还可以在编程时加一些必要的提示语,用printf(“”);语句直接可输入.
4.感受:
经过两周的编程实习,并在后一段的报告总结,我对C语言这门科有新的认识。
要成功编一套程序,不仅需要有一个整体的思路,更重要的是对基础知识把握一定要扎实。
通过编程,对我发现了很多知识上的漏洞和不足,也得到了用诸多C语言解决实际问题的宝贵经验。
相信在以后的学习生活包括考试中一定会有很大帮助。
当然我的成绩也离不开老师的热心帮助,不管是粗心造成的错误还是正需本身的错误,老师都耐心给我讲解调试,知道成功运行。
我想没有老师的帮助我很难在短期内把程序设计做的这样好,在此特地感谢老师的帮助。
七、源程序清单:
#include"stdio.h"
#include"string.h"
#defineMAX20
#definePAGE10
#definePRINT1printf("\n")
#definePRINT2printf("numnamesexagebirthdayscore\n")
#definePRINT3printf("%d%s%c%d%d-%d-%d%d\n",student[i].num,student[i].name,student[i].sex,student[i].age,student[i].birth.year,student[i].birth.month,student[i].birth.date,student[i].score)
#definePRINT4printf("*******************************************************************\n")
intsum;
/*date*/
structdate
{intyear;
intmonth;
intdate;
};
/*studentstructtype*/
structstudent_type
{intnum;
charname[10];
intsex;
intage;
intscore;
structdatebirth;
}student[MAX];
/*stonemessage*/
save_message(intsum)
{
FILE*fp;
inti;
if((fp=fopen("e:
\\score.txt","wb"))==NULL)
{
printf("thefileyoureadiswrong1\n");
return;
}
for(i=0;i if(fwrite(&student[i],sizeof(structstudent_type),1,fp)! =1) printf("thefileyouwriteiswrong! \n"); fclose(fp); } /*inputmessage*/ input_message() {inti=0; system("cls"); printf("\n\ninputstudentmessage\n"); PRINT1; do {printf("NO.%dstudent\n",i+1); printf("\nstudentnumber(****): "); scanf("%d",&student[i].num); if(student[i].num==0)break; printf("\nstudentname: "); scanf("%s",&student[i].name); printf("\nstudentsex(m/f): "); getchar(); scanf("%c",&student[i].sex); printf("\nstudentage: "); scanf("%d",&student[i].age); printf("\nstudentbirthday(yyyy-mm-dd): "); scanf("%d-%d-%d",&student[i].birth.year,&student[i].birth.month,&student[i].birth.date); printf("\nstudentsorce: "); scanf("%d",&student[i].score); i++; }while(i printf("\n%dstudentsmessageinnputover! --\n",i); sum=i; printf("\npressanykeyback! "); bioskey(0); } /*readmessang*/ intread_message() {FILE*fp; inti=0; if((fp=fopen("e: \\score.txt","rb"))==NULL) {printf("\n\n********&*%%%%%%%%%%%%%%%%pressanykey*******\n"); return; } while(feof(fp)! =1) {fread(&student[i],sizeof(structstudent_type),1,fp); if(student[i].num==0)break; elsei++; } fclose(fp); return(i); } output_message() {inti=0,j=0,count,page=1; system("cls"); printf("\n\nstudentmessagefrompage%d\n\n",page); PRINT2; PRINT1; do {if(student[i].num! =0) {j++; if(j%PAGE! =0) { PRINT3; PRINT1; } else {PRINT3; PRINT1; if(student[i+1].num! =0) {printf("pressanykeycontinue! "); bioskey(0); system("cls"); printf("\n\nstudentmessageformpage%d\n\n",++page); PRINT2; PRINT1; } } } i++; }while(student[i].num! =0); printf("pressanykeyback! "); bioskey(0); } insert_message() {inti=sum,j,flag=0; charchoice; system("cls"); printf("\n\nInsertamewstudent\n"); PRINT1; do {printf("\nnewstudentnumber: "); scanf("%d",&student[i].num); printf("\nstudentname: "); scanf("%s",&student[i].name); getchar(); printf("\nstudentsex: "); scanf("%c",&student[i].sex); getchar(); printf("\nstudentage: "); scanf("%d",&student[i].age); getchar(); printf("\nstudentbirthday: "); scanf("%d-%d-%d",&student[i].birth.year,&student[i].birth.month,&student[i].birth.date); getchar(); printf("\nstudentscore: "); scanf("%d",&student[i].score); PRINT4;sum++; printf("continue? (y/n)"); choice=getch(); if(choice=='y'||choice=='Y') {printf("\ncontinue! "); i++; flag=1; }elseflag=0; }while(flag==1); save_message(sum); printf("\npressanykeyback! "); bioskey(0); } /*deletemessage*/ del_message() { inti,j,t,choice1; charchoice2; system("cls"); printf("\n\n\n\n*******************************************************************"); printf("pleaseinputthenumberofstudentyouwanttodelete: "); scanf("%d",&choice1); for(i=0;i { if(student[i].num==choice1) {t=i; break; } } PRINT4; PRINT1; PRINT2; PRINT1; PRINT3; PRINT1; getchar(); for(i=t;i {j=i+1; student[i]=student[j]; } sum=sum-1; printf("theinformationofthisstudenthasdeleted! "); bioskey(0); } /*revisemessage*/ revise_message() {inti=0,choice,revise_num,flag; do {system("cls"); printf("\ninputstudentnumber: "); scanf("%d",&revise_num); for(i=0;i if(student[i].num==revise_num) {printf("\n--studentmessage--\n"); PRINT1; PRINT2; PRINT3; printf("\nwhichdoyouwanttorevise? \n"); printf("\n1.number\n"); printf("\n2.name\n"); printf("\n3.sex\n"); printf("\n4.age\n"); printf("\n5.birthday\n"); printf("\n6.score\n"); printf("\nselect(1-6): "); scanf("%d",&choice); switch(choice) {case1: printf("\ninputreviesdnumber: "); scanf("%d",&student[i].num);break; case2: printf("\ninputreviesdname: "); scanf("%s",&student[i].name);break; case3: printf("\ninputreviesdsex: "); getchar(); scanf("%c",&student[i].sex);break; case4: printf("\ninputreviesdage: "); scanf("%d",&student[i].age);break; case5: printf("\ninputreviesdbirthday: "); scanf("%d-%d-%d",&student[i].birth.year,&student[i].birth.month,&student[i].birth.date);break; case6: printf("\ninputreviesdscore: "); scanf("%d",&student[i].score);break; } PRINT1; PRINT2; PRINT3; break; } if(i==sum) {printf("thestudentdoesn'texsit! "); bioskey(0); } printf("\n\ncontinue? (y/n)"); choice=getch(); if(choice=='y'||choice=='Y') {flag=1; printf("\ncontinue! "); } elseflag=0; } while(flag==1); printf("\npressanykeyback! "); bioskey(0); } renew_message() {intchoice; do { system("cls"); printf("\n\n\n**************renewstudentmessage**************\n\n\n"); printf("1.insertstudentmessage\n\n"); printf("2.deletestudentmessage\n\n"); printf("3.revisestudentmessage\n\n"); printf("0.back\n\n"); printf("select(0-3): "); scanf("%d",&choice); switch(choice) {case1: insert_message();break; case2: del_message();break; case3: revise_message();break; case0: break; } } while(choice! =0); } /*inquirebyname*/ inquire_name() {inti,choice,j=0; charinquire_name[10]; system("cls"); printf("\ninputstudentname: "); scanf("%s",&inquire_name); for(i=0;i if(strcmp(student[i].name,inquire_name)==0&&student[i].num! =0) {printf("\n--studentmessage--\n"); PRINT1; PRINT2; PRINT3; } elsej++; if(j==sum) printf("\nthestudentdoesn'texisit"); bioskey(0); } /*inquirebynum*/ inquire_num() {inti,choice,j=0; charinquire_num; system("cls"); printf("\ninputstudentnumber: "); scanf("%d",&inquire_num); for(i=0;i if(student[i].num=
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计 报告书