C语言课程设计.docx
- 文档编号:29265819
- 上传时间:2023-07-21
- 格式:DOCX
- 页数:37
- 大小:296.48KB
C语言课程设计.docx
《C语言课程设计.docx》由会员分享,可在线阅读,更多相关《C语言课程设计.docx(37页珍藏版)》请在冰豆网上搜索。
C语言课程设计
实验题目《学生信息管理系统》
一、 实验目的
1.体验在TC环境下或VC++6.0环境下的编程过程,以及熟练掌握和应用C语言的相关操作。
2.体验将来有可能从事软件开发的过程,实现独立完成开发一个小型的管理系统,提高独立编程能力,积累编程经验。
3.培养学生独立完成C语言程序课程设计的能力。
4.考察学生对C语言知识的应用能力。
二、 实验内容
1.运用结构体数组或者链表编辑一个小型的学生信息管理系统,并要使这个系统具查找、添加、删除、排序、打印、统计,以及信息的录入等功能,必要的话也可以添加保护功能(添加密码)。
2.执行编译操作,对错误和警告进行排除,并且调试程序,使管理系统可以实现你所需要的功能。
3.程序编辑完成后,让老师检查验收,并且解答老师对程序所提出若干问题。
4.对课程设计进行经验总结,并完成课程设计实验报告。
三、需求分析
1.该系统具有录入、修改、删除、添加、排序、统计和输出等功能,并且为了具有保护功能,添加了用户口令功能,口令为提前在源程序中预设并可进行修改,对于其他模块,具有以下功能:
(1).录入模块:
录入这个系统内的所有学生信息,并且存放在指定的文本档(格式:
文件名.txt)中。
(2).信息更新模块可分为:
①修改模块:
对有错误的或者右变化的学生信息进行修改
②删除模块:
删除不需要的学生信息。
③添加模块:
添加新录入的学生信息。
(3).排序模块:
对学生成绩按平均成绩的大小进行排序(排名由大到小)。
(4).统计模块:
按成绩统计及格以及步及格人数。
(5).输出模块:
整体查看学生信息。
2.建立该系统的目的就是为了简化一些认为操作起来很繁琐的工作,譬如对学生平均分的计算,以及名次的排序。
3.该系统是在VC++6.0的环境下运行的的。
四、概要设计
1、方案设计
2、模块功能说明
(1).录入模块:
首先出入要录入的学生人数(要小于程序中的最大人数MAX),人后录入这个系统内的所有学生信息,并且会自动储存在指定的文本档(格式:
文件名.txt)中。
(2).信息更新模块可·分为:
①修改模块:
可按序号删除或按姓名删除,对有错误的或者右变化的学生信息进行修改。
②删除模块:
输入学号或者学生姓名删除不需要的学生信息。
③添加模块:
点击添加然后开始输入,新添加的学生信息。
(3).排序模块:
对学生成绩按平均成绩的大小进行排序(
排名由大到小)。
(4).统计模块:
选择要统计的科目,输出按成绩统计及格以及步及格人数的信息。
(5).输出模块:
整体查看学生信息,都是添加或删除后的最终结果。
(6).用户登录模块:
在编辑代码过程中,先设定初始口令,
在程序运行时需输入正确的口令才能进入主页面,否则退出程序。
五、详细设计及运行结果
1)、系统结构图,对系统进行分析,给出结构图.
2)分模块:
六、调试情况,设计技巧及体会
1我对自己这次的实验设计完成的还时不太满意,这个学生证管理系统利用结构体、数组知识运用VCC++6.0编写完成,但是对指针链表还没有熟练掌握和应用,所以程序有点繁琐。
此程序的不足之处是学生信息还不够健全,譬如没有家庭住址,是否团员或者党员等等一系列相关的学生基本信息。
另一方面就是在运行此程序时。
需要执行操作的提示语不够具体和完善。
改进方法:
在时间充足的情况下多建立结构体数组存储学生基本信息,使得学生信息更加完善。
此外,可以在编程时加一些必要的提示语,如“输入完毕,是否确认”、“是否继续”等。
2、课程设计看似简单,实则不然。
首先,它让我花费了近三天时间写程序,以后的大多数时间就在调程序,从构思到结构大体框架再到细节。
这让我明白“宏观主宰全局,细节决定成败”的道理,即使是小到一个分号也有可能使你的程序无法运行。
就像老师所说,写程序的时候必须很认真,欲速则不达。
程序的关键在于调试程序。
其次,它也强迫我必须自觉的看C语言书,在搞懂最基本最实在的基础知识同时熟练掌握比较难懂的链表和指针,并学会在小型程序中运用它。
再则,在实习中,我深刻体会到老师发挥的重要作用:
C语言程序对我们来说比较难,在匆忙的学习中更是难上加难,似乎觉得自己仅是个匆匆过客,但在老师的帮助下我学会了如何调试,如何查找系统没有提示的错误,最后终于排除万难把程序搞定,体会到原来编程也挺有意思的快感。
我想没有老师的帮助我很难在短期内把程序设计做的这样好。
在此特地感谢老师的帮助。
七.参考文献
C语言程序设计(第二版)王曙燕/主编
八.附录
源代码
#include
#include
#include
#include
#defineMAX100/*可录入学生的最大人数*/
#definech1"xiaxia"/*口令的初始化*/
intsum;/*定义全局变量控制学生人数*/
typedefstruct
{
floatgym;
floateng;
floatc;
floatmath;
floatphy;
floatave;
}RESULT;/*学生成绩*/
typedefstruct
{
intyear;
intmonth;
intday;
}DATE;/*学生出生日*/
typedefstruct
{
charname[20];
intage;
charsex[5];
chartel_num[15];
DATEbirthday;
longnum;
RESULTresult;
}STUDENT;/*学生基本信息*/
/*输入模块*/
voidintput(STUDENTstu[])
{
inti=0;
system("cls");
printf("录入学生基本信息\n");
printf("--------------------------------------------------\n");
printf("要录入学生的人数是:
");
scanf("%d",&sum);
printf("开始输入学生基本信息:
\n");
for(i=0;i { printf("NO: %d\n",i+1); printf("姓名: "); scanf("%s",stu[i].name); printf("年龄: "); scanf("%d",&stu[i].age); printf("性别: "); scanf("%s",stu[i].sex); printf("联系方式(手机号): "); scanf("%s",&stu[i].tel_num); printf("出生日期: "); scanf("%d%d%d",&stu[i].birthday.year,&stu[i].birthday.month,&stu[i].birthday.day); /*年月日用空格隔开*/ printf("学号: "); scanf("%d",&stu[i].num); printf("\n考试成绩信息\n体育成绩: "); scanf("%f",&stu[i].result.gym); printf("C语言成绩: "); scanf("%f",&stu[i].result.c); printf("英语成绩: "); scanf("%f",&stu[i].result.eng); printf("高数成绩: "); scanf("%f",&stu[i].result.math); printf("大物成绩: "); scanf("%f",&stu[i].result.phy); stu[i].result.ave=(stu[i].result.c+stu[i].result.gym+stu[i].result.eng+stu[i].result.math+stu[i].result.phy)/5; } printf("\n\n学生信息录入完毕...^_^\n\n(请按回车进入主菜单): "); getchar(); } /*整体输出模块*/ voidoutput(STUDENTstu[]) { inti=0; system("cls"); printf("***************************\n"); printf("********学生基本信息*******\n"); printf("***************************\n"); for(i=0;i { printf("NO: %d\n",i+1); printf("学号NO: %ld\n\n",stu[i].num); printf("姓名: %s年龄: %d性别: %s出生日期: %d.%d.%d联系方式: %s", stu[i].name,stu[i].age,stu[i].sex,stu[i].birthday.year,stu[i].birthday.month,stu[i].birthday.day,stu[i].tel_num); printf("\n\n成绩: 体育: %0.1f高数: %0.1f英语: %0.1fC语言: %0.1f物理: %0.1f平均成绩: %0.1f" stu[i].result.gym,stu[i].result.math,stu[i].result.eng,stu[i].result.c,stu[i].result.phy,stu[i].result.ave); printf("\n*---------------------------------------------------------------------------*"); printf("\n\n"); getchar(); } } /*文件的写入*/ voidsave_file(STUDENTstu[]) { inti=0; FILE*fp1,*fp2; fp1=fopen("student.txt","wt"); fp2=fopen("count.txt","wt"); if((fp1=fopen("student.txt","wt"))==NULL) { printf("读文件出错"); exit (1); } for(i=0;i if(fwrite(&stu[i],sizeof(STUDENT),1,fp1)! =1) printf("写文件错误"); fprintf(fp2,"%d",sum); fclose(fp1); fclose(fp2); } /*文件的读取*/ voidread_file(STUDENTstu[]) { inti=0; FILE*fp1,*fp2; fp1=fopen("student.txt","rt"); fp2=fopen("count.txt","rt"); fscanf(fp2,"%d",&sum); if((fp1=fopen("student.txt","rt"))==NULL) printf("\n\n---------库存文件不存在! 请创建"); for(i=0;i fread(&stu[i],sizeof(STUDENT),1,fp1); fclose(fp1); fclose(fp2); } /*信息修改模块*/ voidmodify(STUDENTstu[]) { intchoice,choice1,choice2,num,flag=1,i=0; charchoice3; while(flag==1) { system("cls"); printf("*请输入要修改学生的学号NO: "); scanf("%d",&num); for(i=0;i if(num==stu[i].num) { printf("*要修改学生的原始信息: \n"); printf("学号NO: %d\n\n",stu[i].num); printf("姓名: %s年龄: %d性别: %s出生日期: %d年%d月%d日联系方式: %s",stu[i].name,stu[i].age, stu[i].sex,stu[i].birthday.year,stu[i].birthday.month,stu[i].birthday.day,stu[i].tel_num); printf("\n\n成绩: 体育: %0.1f高数: %0.1f英语: %0.1fC语言: %0.1f物理: %0.1f平均成绩: %0.1f" stu[i].result.gym,stu[i].result.math,stu[i].result.eng,stu[i].result.c,stu[i].result.phy,stu[i].result.ave); printf("\n*---------------------------------------------------------------------------*\n"); printf("请选择要修改哪一项? \n"); printf("1.姓名\n"); printf("2.年龄\n"); printf("3.性别\n"); printf("4.出生日期\n"); printf("5.年龄\n"); printf("6.成绩\n"); printf("7.联系方式\n"); printf("0.返回\n"); printf("请选择(0-7): "); scanf("%d",&choice); switch(choice) { case0: break;break; case1: printf("输入修改姓名: "); scanf("%s",&stu[i].name);break; case2: printf("输入修改年龄: "); scanf("%d",&stu[i].age);break; case3: printf("输入修改性别: "); scanf("%s",&stu[i].sex);break; case4: { printf("1.年2.月3.日0.返回\n"); printf("请选择要修改的日期(0-3): "); scanf("%d",&choice1); switch(choice1) { case0: break;break; case1: printf("输入修改年: "); scanf("%d",&stu[i].birthday.year);break; case2: printf("输入修改月: "); scanf("%d",&stu[i].birthday.month);break; case3: printf("输入修改日: "); scanf("%d",&stu[i].birthday.day);break; } }break; case5: scanf("%d",&stu[i].age);break; case6: { printf("1.体育2.高数3.C语言4.大物5.英语0.返回\n"); printf("请选择要修改的科目: "); scanf("%d",&choice2); switch(choice2) { case0: break;break; case1: printf("**输入新体育成绩: "); scanf("%f",&stu[i].result.gym);break; case2: printf("**输入新高数成绩: "); scanf("%f",&stu[i].result.math);break; case3: printf("**输入新C语言成绩: "); scanf("%f",&stu[i].result.c);break; case4: printf("**输入新大物成绩: "); scanf("%f",&stu[i].result.phy);break; case5: printf("**输入新英语成绩: "); scanf("%f",&stu[i].result.eng);break; } }break; case7: printf("**输入新的联系方式: "); scanf("%s",&stu[i].tel_num);break; } stu[i].result.ave=(stu[i].result.c+stu[i].result.eng+stu[i].result.gym+stu[i].result.math+stu[i].result.phy)/5; if(choice) { printf("修改后的学生信息: \n"); printf("学号NO: %d\n\n",stu[i].num); printf("姓名: %s年龄: %d性别: %s出生日期: %d年%d月%d日联系方式: %s",stu[i].name,stu[i].age, stu[i].sex,stu[i].birthday.year,stu[i].birthday.month,stu[i].birthday.day,stu[i].tel_num); printf("\n\n成绩: 体育: %0.1f高数: %0.1f英语: %0.1fC语言: %0.1f物理: %0.1f平均成绩: %0.1f" stu[i].result.gym,stu[i].result.math,stu[i].result.eng,stu[i].result.c,stu[i].result.phy,stu[i].result.ave); printf("\n*--------------------------------------------------------------------------*\n"); }break; } printf("\n您是否继续进行(Y/N): \n"); scanf("%s",&choice3); if(choice3=='Y'||choice3=='y'); else { flag=0; printf("\n\n*请按回车键返回主菜单......."); getchar(); getchar(); } } } /*信息添加模块*/ voidadd(STUDENTstu[]) { intflag=1; charContinue; system("cls"); printf("*请出入要添加的学生基本信息(按回车键开始输入): "); getchar(); getchar(); while(flag==1) { system("cls"); printf("要添加第NO: %d学生信息\n",sum+1); printf("姓名: "); scanf("%s",stu[sum].name); printf("年龄: "); scanf("%d",&stu[sum].age); printf("性别: "); scanf("%s",stu[sum].sex); printf("联系方式(手机号): "); scanf("%s",&stu[sum].tel_num); printf("出生日期: "); scanf("%d%d%d",&stu[sum].birthday.year,&stu[sum].birthday.month,&stu[sum].birthday.day); /*年月日用空格隔开*/ printf("学号: "); scanf("%d",&stu[sum].num); printf("\n考试成绩信息\n体育成绩: "); scanf("%f",&stu[sum].result.gym); printf("C语言成绩: "); scanf("%f",&stu[sum].result.c); printf("英语成绩: "); scanf("%f",&stu[sum].result.eng); printf("大物成绩: "); scanf("%f",&stu[sum].result.phy); printf("高数成绩: "); scanf("%f",&stu[sum].result.math); stu[sum].result.ave=(stu[sum].result.c+stu[sum].result.gym+stu[sum].result.eng+stu[sum].result.math+stu[sum].result.phy)/5; sum++; printf("\n---第%d学生信息添加完毕---\n",sum); printf("\n\n^-^是否继续进行添加操作(Y/N)? : "); scanf("%s",&Continue); if(Continue=='y'||Continue=='Y'); else flag=0; } printf("\n\n按任意键返回主菜单: ......"); getchar(); getchar(); } /*按学号删除模块*/ voiddel_num(STUDENTstu[]) { intnum,flag=1,i,m; charchoice,choice1; while(flag==1) { system("cls"); printf("请输入要删除的学号: "); scanf("%d",&num); for(i=0;i if(stu[i].num==num) { printf("\n*要删除的学生信息为: \n"); printf("姓名: %s年龄: %d性别
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计