C语言专周报告 学生管理系统.docx
- 文档编号:7576659
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:12
- 大小:50.45KB
C语言专周报告 学生管理系统.docx
《C语言专周报告 学生管理系统.docx》由会员分享,可在线阅读,更多相关《C语言专周报告 学生管理系统.docx(12页珍藏版)》请在冰豆网上搜索。
C语言专周报告学生管理系统
专周报告
课程名称
程序设计基础专周
专周题目
学生成绩管理系统的设计与实现
姓名
班级
学号
指导教师
设计时间
2011-12-31至2012-1-7
计算机工程系
目录
目录是自动生成的,方法是以下的要出现在目录中的行必须设置为标题(1-3级),然后使用菜单->插入->引用->目录,文档内容改变后在以下目录上点击右键,更新域即可。
一、题目设计和要求
二、设计与实现
1、分析问题
2、设计思路
3、主要流程图
4、功能实现
5、关键代码
1)自定义类型
2)input函数
3)save函数
4)search函数
5)modify函数
6、典型算法和技巧分析,调试体会
三、出现的问题及解决方案
四、专周小结
五、参考文献
一、题目和设计要求
专周题目:
学生成绩管理系统的设计与实现
设计要求:
Ø系统用于管理多门课程和多个教学班学生的成绩。
课程包括课程编号、课程名称等信息;学生信息包括学生编号、姓名、性别等信息;学生选课信息由学生编号、课程编号、成绩三个信息构成。
Ø所有信息都要使用文件保存,
学生信息保存在stud.dat文件中;
课程信息保存在cour.dat文件中;
学生选课信息保存在cour_stud.dat文件中。
Ø由教务处工作人员录入课程信息、学生信息、学生选课的基本信息(无成绩),由教师录入学生成绩。
Ø信息构成
1)学生信息:
班级、学号、姓名、性别
2)课程信息:
课程编号、课程名称、学分
3)学生选课信息:
班级、学号、课程编号、成绩
功能要求:
1)学生信息录入、修改、查找(按班级、学号或姓名)功能
2)课程信息录入、修改、查找(按课程编号或课程名称)功能
3)学生选课功能:
以学生身份登录后显示出所有课程信息、
学生选择课程、自动追加到选课信息文件中。
4)教师录入指定课程的成绩功能,教师选择一个课程(录入课程编号)后显示出选择该课程的所有学生名单,由教师依次录入学生成绩,并保存到学生选课信息文件中。
5)学生成绩计算功能,可以输入某学生的班级和学号、显示出该名学生的所有成绩,并计算出平均分。
其他要求:
1.以上信息都要使用结构体(结构体的名称要以自己的班号和学号结尾)来封装。
2.界面使用控制台菜单,菜单要分层设计(树状结构),并有返回、退出等选项。
3.每天上报日志文件。
二、设计与实现
1、分析问题
a)主过程:
进入系统,用户需先输入学生信息、课程信息、学生选课信息,然后保存信息,根据需要查询学生、课程、学生选课信息,或者修改信息。
b)登录该系统时,用户选择的可能不是该程序中的可供选择选项,所以用do-while语句来做相应限制。
c)保存信息时可能有误,导致下一次需要查询该信息时不能读取出数据。
d)查找信息时,因为未输入该数据所以没有相应数据读出。
e)询问用户是否继续输入信息时,用户不按系统要求输入(Y/N),而输入其他值。
2、设计思路
a)定义结构体,编写主菜单、以便供用户的需求做选择。
b)根据菜单提示,用户首先输入学生信息、课程信息、选课信息,还可据用户需要选择是否还要输入信息,然后分别建立三个文件将它们保存起来。
c)根据用户需要,参考主菜单的选项一步一步走便可以查询到自己想查询的信息,并读取出来。
d)同样,如果用户想修改某人的信息,也根据主菜单提示进行选择并修改。
e)主函数,用switch语句实现程序。
3.主要流程图
学生成绩管理系统的设计与实现
4、功能实现
1.我的程序中包含了四个函数,input函数、save函数、search函数、modify函数,用于不同情况用户操作。
2.用户输入单个信息后、程序会提示是否需要继续输入信息,根据相关操作如果用户需要便可继续输入,如不需要了、便又返回到主菜单。
3.save为保存函数,可以建立文件以便分别保存这三份信息,便于用户查询。
4.修改函数modify函数,如果用户发现输入的信息中有错误的内容需要更正,那此函数便可达到目的。
5.主函数部分用switch,case实现整个系统的管理,是程序正常运行。
5、关键代码
1)自定义类型
structstudent/*定义结构体*/
{
charcla[10];/*存储学生班级*/
charnum[10];/*存储学生学号*/
charname[10];/*存储学生姓名*/
charsex[3];/*存储学生性别*/
floatchinese;/*存储语文成绩*/
floatmath;/*存储数学成绩*/
floatenglish;/*存储英语成绩*/
floataverage;/*存储平均成绩*/
}stud[80];/*有80个元素的结构体数组*/
structcourse/*定义结构体*/
{
charcour_num[10];/*存储课程编号*/
charcour_name[10];/*存储课程名称*/
charxuefen[10];/*存储课程学分*/
}cour[20];/*有20个元素的结构体数组*/
structsel_cour/*定义结构体*/
{
charcla[10];/*存储班级*/
charnum[10];/*存储学生学号*/
charcour_num[10];/*存储课程编号*/
chargra[10];/*存储成绩*/
}sel_cour[10];/*有10个元素的结构*/
2)input函数
/*
功能:
输入
参数:
student指向学生信息
*/
intinput(structstudentstud[],intn)/*输入学生信息*/
{
inti=0;/*用于保存读入新增记录的条数*/
charsign;/*用于保存用户选择(Y/N)*/
while(sign!
='n'&&sign!
='N')/*只要sign变量值不是n或N,就开始读取用户输入*/
{
printf("班级:
");
scanf("%s",stud[n+i].cla);
printf("学号:
");
scanf("%s",stud[n+i].num);
printf("姓名:
");
scanf("%s",stud[n+i].name);
printf("性别:
");
scanf("%s",stud[n+i].sex);
printf("语文:
");
scanf("%f",&stud[n+i].chinese);
printf("数学:
");
scanf("%f",&stud[n+i].math);
printf("英语:
");
scanf("%s",&stud[n+i].english);
stud[n+i].average=(stud[n+i].chinese+stud[n+i].math+stud[n+i].english)/3;
printf("是否继续输入信息?
(Y/N)");
getchar();/*接受上一scanf的回车符*/
scanf("%c",&sign);/*读入用户选择的sign变量*/
i++;/*用于保存读入新增记录的条数*/
}
return(n+i);
}
3)Save函数
/*
功能:
保存
参数:
student指向学生信息
*/
voidsavestud()/*保存学生信息*/
{
FILE*fp1;
inti;
if((fp1=fopen("d:
\\stud.dat","w+"))==NULL)
{
printf("打开文件失败!
");
return;
}
for(i=0;i<80;i++)
if(fwrite(&stud[i],sizeof(structstudent),1,fp1)!
=1)
printf("cannotwritefile!
\n");
fclose(fp1);
}
4)Search函数
/*
功能:
查询信息
参数:
student指向学生信息
*/
voidsearch(structstudentstud[],intn)/*查找显示一个记录*/
{
chars[20];
inti=0;
printf("姓名:
");
scanf("%s",s);/*读入用户学生查找姓名*/
while(strcmp(stud[i].name,s)!
=0&&i i++; if(i==n) { printf("对不起,没有该记录! \n");/*输出信息失败*/ return; } printf("班级: %s\n",stud[i].cla);/*输出该学生信息*/ printf("学号: %s\n",stud[i].num); printf("姓名: %s\n",stud[i].name); printf("性别: %s\n",stud[i].sex); printf("语文: %5.2f\n",stud[i].chinese); printf("数学: %5.2f\n",stud[i].math); printf("英语: %5.2f\n",stud[i].english); printf("平均分: %5.2f\n",stud[i].average); } 5)Modify函数 /* 功能: 修改信息函数 参数: student指向学生信息 返回值: 无 */ voidmodify(structstudentstud[],intn)/*修改学生信息*/ { chars[20]; inti=0; printf("姓名: "); scanf("%s",s);/*查找*/ if(i==n) { printf("对不起、没有该记录! \n");/*查找失败*/ return; } printf("修改该学生信息: \n");/*修改信息*/ printf("班级: "); scanf("%s",stud[i].cla); printf("学号: "); scanf("%s",stud[i].num); printf("姓名: "); scanf("%s",stud[i].name); printf("性别: "); scanf("%s",stud[i].sex); printf("语文: "); scanf("%f",&stud[i].chinese); printf("数学: "); scanf("%f",&stud[i].math); printf("英语: "); scanf("%f",&stud[i].english); } 6、典型算法和技巧分析,调试体会 1,从整体结构看,在我写的这个函数里,包含了几个函数,根据用户不同,会遇到很多不同的情况,把每一种情况都编写成一个函数,便于编写,也便于思考和分析,看起来也显得清晰简洁。 2,在输入学生、课程、选课信息时,我都使用了一个while语句,给予用户提示,以保证输入给系统的信息可以被识别。 3,在查找信息时,用while语句定义了范围, 4,保存信息时、用fopen函数在目录下创建文档,然后用fwrite函数写入文件。 5,由于函数很多,流向也很不清晰,刚开始运行总会出现很多很奇怪的结果,而且错误很多,vc的提示也不怎么懂。 我将每个函数分开先进行调试,确认正确之后,只要保证函数之间的连接正确即可 6,编出来的程序总是错太多、调试了发现自己又不太会调试程序。 7,程序中有很多函数调用,所以必须开始要正确的定义那些函数。 8,调试时、首先我们要掌握方法,然后在调试的过程中不要心急心慌,要一步一步慢慢的来,跟着程序走、冷静才能发现你的错。 三、出现的问题及解决方案 1。 编程序时,因为有三个信息,所以出现了重定义。 2.编译时、发现有些变量未定义,及时定义。 3.errorC2061: syntaxerror: identifier'folat'把float写成了folat; 4.经常会出现少打标点符号的错,比如说“}”、“;”、“()”等。 5.一次运行时,(Yes\No)始终不能显现,只有一个“(Y\)”,后来才知道是斜线的方向反了,正确的应该是(Y/N)。 6.经常会出现什么非法引用的 7.保存信息后、如果退出运行在进入,再去查找信息、就没有记录了,程序不对不能存入文件。 未解决 8.我的程序中,那个修改信息那一段程序、运行的时候始终不对、不是修改,反倒成了输入信息。 9.一次程序中少了一个“printf("是否继续输入信息? (Y/N)");”,结果程序变成了死程序。 10.一些细节出问题了,编译是没错的、可运行着突然就死了。 四.专周小结 1.“学生成绩管理系统的设计与实现”这个任务其实很贴近我们的生活和学习,多练耶总对我们有好处。 2.写这个程序的时候才发现,平时的我就仿照到书写一些很简单的程序,一旦像现在这样写一个很大的程序时,就发现在长长的一大块里面找一个小错误是多么的困难。 3.当我们在调试的时候、如果调试很久也成功不了,就要考虑是不是自己储备的某些知识是错的,一直在误导你,这个时候就需要去重新认真的看看书,看看资料,之后就恍然大悟了。 4.通过程序设计,深深地体会到了那些编程工作者的枯燥乏味了,这是一项很艰难的工作,特别是老是运行不了,就让人很想放弃,不过一阵郁闷过后,重新冷静分析并且解决问题,可真是大快人心。 所以,不论做什么事情,不在乎结果,能够坚持不放弃才是最重要的。 5.在解决时间函数问题的同时,发现我们自身的知识实在是非常有限,也越发的感觉到c语言的魅力,也感受到了“学的越多,知道的越少”。 其实本来想实现通过按键来做出选择,而不是像这种输入1,2,3,4来做选择,在网上搜查才发现,那就要涉及到更多更难的知识。 所以,我感觉,学习知识是一个主动接受的过程,而不是一个被迫使用的过程。 6.有些总结我直接保留的、我觉得说得很对,坚持的确很重要、而我们也要主动去学。 7.这次的专周,我真的发现了自己好多的不足、感觉什么都不懂、以前上机照着书上的编程,自己想不出什么,而这次的专周、我还是仿照的书上的编了一个程序,中间也遇到过一些问题、但我却放弃了一些问题,就像修改那个、我实在不知道该怎么做了、 8.一周我没做出什么来、验收的时候老师说的好对、蒽我是应该多练了,毕竟书上不是什么都有的、我们需要创新、需要发散、需要改变。 9.不过专周我们的收获还是很大的。 五、参考文献 [1]谭浩强主编《C程序教程》 [2]洪月华肖志军主编《C语言程序设计基础》 [3]XX文献 [4]孙承爱赵卫东《程序设计基础(基于C语言)》 [5]谭浩强主编《C++程序设计》 考核情况(由指导老师填写) 项目 考勤 (20%) 验收 (40%) 报告 (20%) 总分 得分 考勤 记录 考勤日期 出勤记录 验 收 情 况
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言专周报告 学生管理系统 语言 周报 学生 管理 系统