收藏 分销(赏)

C语言课程设计模板.doc

上传人:仙人****88 文档编号:12024357 上传时间:2025-08-29 格式:DOC 页数:29 大小:230.04KB 下载积分:10 金币
下载 相关 举报
C语言课程设计模板.doc_第1页
第1页 / 共29页
C语言课程设计模板.doc_第2页
第2页 / 共29页


点击查看更多>>
资源描述
《高级语言程序设计》 课程设计报告 姓 名: 熊丹 学 号: 11058224 专 业: 电子信息科学与技术 实 验 室: 2602 设计时间: 2012 年 07月 09日 —— 2012 年 07 月 11 日 评定成绩: 指导教师: 朱智林 目 录 一、 课程设计的目的 3 二、 设计的内容与要求 3 三、 总体设计 3 四、 详细设计 4 五、 调试与测试 15 六、 课程设计的总结 17 在本次的课程设计中,我主要负责搜集相关资料,和罗丹丹一起修改了程序,调试了程序中的几处错误, 程序在运行过程中还是比较顺利的,并没有出现什么无法解决的的问题。 对于流程图我主要负责的有:输入数据函数、显示数据函数、插入数据函数、删除数据函数、查找数据函数。 此外负责了课程设计报告的撰写。 一、 课程设计的目的 1. 巩固和加深学生对C语言课程的基本知识的理解和掌握 2. 掌握C语言编程和程序调试的基本技能 3. 利用C语言进行基本的软件设计 4. 掌握书写程序设计说明文档的能力 5. 提高运用C语言解决实际问题的能力 二.设计的内容与要求 学生纪录用文件存储,因而要提供文件的输入输出操作;要实现插入一个新的学生纪录,因而要提供文件的插入操作;要实现学生纪录得修改和删除,以及登记成绩和修改成绩,因而要提供文件纪录的修改和删除操作;要浏览全班成绩,故要提供显示操作;计算学生总成绩需要提供简单的统计操作;要按学号排序输出全班成绩表,因而要提供排序操作;另外要提供键盘式选择菜单以实现功能选择。 三. 总体设计 (1)整个成绩管理系统设计分为11个模块: 1.录入学员信息2.显示学员信息3.成绩排序信息4.添加学员信息5.删除学员信息6.修改学员信息7.查询学员信息8.从文件读入学员信息9.删除文件中学员信息10.保存学员信息11.退出 (2)算法描诉(此程序中所包含的函数) 1.主函数main():定义学生结构体数组,调用录入,统计等函数对成绩表进行处理。 2.输入数据函数input():输入学生姓名,性别,学号,成绩1,成绩2,成绩3以及成绩的排序,平均值和总和。 3.排序函数sort():对总成绩进行排序,按有多到少的顺序。 4.显示数据函数display():显示各个学生的总成绩 5.插入数据函数insert():插入新的同学的成绩,需要输入新同学的姓名,学好,性别。 6.删除数据函数del():由于各种原因,删除某些同学的成绩,这也需要这位同学的姓名,学好,性别。 7.平均值函数average():求各个同学总成绩的平均值。 8.查询数据函数find():查找某位同学的成绩,同样需要这位同学的姓名,学号,性别。 9.保存数据函数save():再一次打开界面是,仍有上次所找的讯息。 10.读出数据函数read():可以读到所有的信息。 11.删除文件函数del_file():删除某个文件的函数,这需要知道该文件的路径。 12.修改文件函数modify():修改文件中的信息,这同样需要文件的路径。 四.详细设计 数据的组织描述(比如主要的变量类型,结构体等等),模块之间的参数设计(接口设计,模块的功能说明),系统控制流程图,各个模块的流程图,采用的算法 数据结构采用结构体,设计学生纪录结构体: struct student { int no; //学号 char name[20];//姓名 char sex[4];//性别 float score1;//成绩1 float score2;//成绩2 float score3;//成绩3 float sort;//排序成绩 float ave;//平均分 float sum;//总分 }; (1)主函数输出提示菜单:插入学生纪录 修改学生纪录 删除学生纪录 登记成绩 修改成绩 浏览学生纪录 查看总成绩 查看成绩表 (2)数据插入模块 采用追加的方式把学生成绩信息写入学生成绩信息文件。 (3)数据修改模块 通过菜单选择修改学生纪录,打开该文件,从文件中读一条记录,判断是否要修改,如果是,则修改后重新写入文件;否则直接重新写入文件,读下一条记录。 (4)数据删除模块 通过菜单选择删除学生纪录,打开该文件,从文件中读一条记录,判断是否要删除,如果是,则舍弃;否则重新写入文件,读下一条记录。 (5)成绩登记模块 类似数据修改模块,只是修改字段为各个科目的成绩。 (6)成绩修改模块 参考数据修改模块。 (7)数据浏览模块 读取学生成绩信息文件,显示输出。 (8)成绩统计模块 从学生成绩信息文件中读取一个学生纪录,计算该学生的总成绩(简单的成绩相加),输出,然后读取下一条纪录。 (9)成绩表查看模块 建立结构体数组 Struct { SR record; //学生纪录 Float total; //总成绩 }stu[N]; 从学生成绩信息文件中读取各个纪录,total中存放计算得到的总成绩。然后采用排序算法(冒泡、插入、选择等)对数组按照总成绩进行排序。最后顺序输出。 int i=0 char ch i=i+1 输入学 生学号 输入学 生姓名 输入学 生性别 输入学生 成绩1 输入学生 成绩2 input函数 输入学生 成绩3 是否继续 Y 输入 N ch=getchar() 结束 sort函数 i=1 i<=n-1? ? Min=s[i],j=i+1 j<n? S[j]<s[min]? Min=j j=j+1 输出排序结果 结束 Min>i? temp=s[i] S[i]=s[min] S[min]=temp i=i+1 display函数 int I,char as 输出stu[i]学号姓名性别成绩1成绩2成绩3平均值 i=0 i<now_no&&stu[i].name[0] N Y i++ as=getchar() while(!as) Y system(“cls”) 结束 char ch 输入新学生的信息 stu[now_no].no 输入学生姓名 输入学 生性别 输入学生学号 输入学 生成绩1 输入学生成绩2 输入学生成绩3 insert函数 now_no=now_no+1 是否继续输入Y N ch=getch() while(ch=’n’&&ch!=’N’) Y 结束 .del函数 unsigned long inum int i=0 输入要删除学生的学号 输入 i<now_no N Y i=i+1 stu[i].no==inum N Y i==now_no N Y now_no-=1 stu[i]=stu[now_no-1] now_no-=1 排序 结束 i=0 输入成绩1,成绩2,成绩3 总成绩=成绩1+成绩2+成绩3 平均成绩=总成绩/3 i=i+1 i>n? 否 是 输出平均成绩 结束 average函数 find函数 int i char str[20],as 输入要查询的学生姓名 gets[str] i=0 i<now_no N Y i++ if(!strcmp(stu[i].name,str)) N Y 输出stu[i]的学号姓名性别成绩1成绩2成绩3平均值 as=getch() while(!as) Y system(“cls”) 结束 save函数 i=0 输入要保存的文件路径 是否能打开文件?否 是 输入成绩1,成绩2,成绩3 总成绩=成绩1+成绩2+成绩3 平均成绩=总成绩/3 输出得到学生的基本信息:姓名,性别,学号,成绩1,成绩2,成绩3,平均成绩。 i=i+1 i>n? 否 是 保存成功,关闭文件 保存失败! 退出该功能,返回主菜单,继续选择 read函数 i=0 输入要读入的文件路径 是否能打开文件?否 是 输入成绩1,成绩2,成绩3 总成绩=成绩1+成绩2+成绩3 平均成绩=总成绩/3 读出学生的基本信息:姓名,性别,学号,成绩1,成绩2,成绩3,平均成绩。 i=i+1 i>n? 否 是 保存的在文件中的所有信息已经读入,,关闭文件 找不到文件! 退出该功能,返回主菜单,继续选择 结束 删除文件函数流程图 打开文件 显示出来文件中的所用信息 保存的在文件中的所有信息已经删除 退出该功能,返回主菜单,继续选择。 按要求输入要删除的文件路径 修改文件函数流程图 输入要修改的学生姓名 得到该生的学号,性别,成绩1,成绩2,成绩3. 按要求修改 得到新的学生信息 退出该功能,返回主菜单,继续选择。 五.调试与测试 调试 1.在编程当中,由于要输入大量的程序,所以经常出现很多不让人注意的小错误。 例如大小写 int写成Int(因为是在word中写的,会自动将字母大写) 2.关系运算符和赋值运算符总是用错,而这种错误也总是被忽略。 3.有时候会忘记加分号或是在不该加的地方加上了分号。不过这种情况还是比较容易被发现的。 4.有时候大括号也会忘加,尤其是在if语句和for语句中。 5.最重要的是函数的应用,函数应该应用得当,否则程序会出现很大的错误,尤其是在如此庞大的程序中。 测试 开始界面 菜单 六.课程设计的总结 通过这个课程设计,我们更加牢固的掌握了书本上的知识。并对于以前不熟悉的知识有了更加深刻的了解。在完成此次课程设计的过程中,虽然有些疲劳和困倦,但带给我很多的收获。C语言已经学了一个学期了,有许多知识都存在似懂非懂的现象,这种现象通过实际的上机操作,已经减少了许多。 很多程序理论上说得过去,但真正上机了却会发现行不通。所以说无论做什么事空有理论而不去实践都收获不到真正的果实。 说实话,我这个程序在所有程序当中算是简单的,所包含的知识也就是调用函数和结构体,当中穿插了一些排序算法,总体来说结构还是很清晰的,由各个模块小模块组成了一个管理系统。但过程中也是遇到了不少的麻烦,很多地方都想不到或是想不全的。所以说对待任何事情我们都不容小觑,一件自己没做过的事谁都不能说你就一定能做好了。 输入和调试程序的过程是相当枯燥的,但构思和完善程序的过程还是比较有趣的,无论怎样,当你完成了一个程序时,还是相当有成就感的。 此次任务的完成,也体现出同学之间的团结精神。实践是检验真理的唯一标准。没有实践,就不会发现和深刻体会它的真实所在。只有通过检验的真理,在自己的心里,才会认可它的真实性。面向对象程序设计的完成,使我们懂得了真理的重要性,理论和实际的相结合,才能真正把握所学和所掌握的知识。同时培养了我们的团队精神,使我我们懂得了团队的重要性。在今后的学习工作中我们将会更好的发挥团队精神。 总的来说,C语言还是十分有趣的,可以通过人为的设计而让电脑来辅助性的做一些机械的东西。在今后的学习过程中,我也加更加认真地学习C语言,希望能在今后设计出一个属于自己的程序。 参考书目:(五号,宋体加粗) [1] 谭浩强,《C语言程序设计》(第四版)[M],清华大学出版社,2008年 (要求:五号字,宋体,单倍行距。按作者、书名、出版社、出版时间格式逐一列出,中间用逗号格开) 附录: 程序清单 #include<stdio.h> #include<conio.h> /*清屏*/ #include <stdlib.h> /*显示目录*/ #include<string.h> #define MAX 1000 void input(); /*输入数据函数*/ void sort();/*排序数据函数*/ void display();/*显示数据函数*/ void insert(); /*插入数据函数*/ void del(); /*删除数据函数*/ void average(); /*平均值函数*/ void find();/*查找数据函数*/ void save(); /*保存数据函数*/ void read(); /*读出数据函数*/ void del_file(); /*删除文件函数*/ void modify(); /*修改文件函数*/ int now_no=0; struct student { int no; char name[20]; char sex[4]; float score1; float score2; float score3; float sort; float ave; float sum; }; struct student stu[MAX],*p; void main()/*主函数*/ { int as; char ch; do{ printf("\n\n\n\n\t\t___︵︵︿︿︿︿︿﹀︿﹀O(∩_∩)O﹀︿﹀︿︿︿︿︿︵︵___"); start: printf("\n\n\n\n\n\t\t ---★你好 欢迎使用学生成绩管理系统!★---\n"); printf(“\n\n\n\t\t\t\t编程者: 熊丹 罗丹丹\t\t\t\t\t\n\n”); printf("\n\n\n\n\t\t ******************按任意键继续*******************"); ch=getch(); } while(!ch); system("cls"); /*一下为功能选择模块*/ do { printf("\n\t\t\t\t1.录入学员信息\n\t\t\t\t2.显示学员信息\n\t\t\t\t3.成绩排序信息\n\t\t\t\t4.添加学员信息\n\t\t\t\t5.删除学员信息\n\t\t\t\t6.修改学员信息\n\t\t\t\t7.查询学员信息\n\t\t\t\t8.从文件读入学员信息\n\t\t\t\t9.删除文件中学员信息\n\t\t\t\t10.保存学员信息\n\t\t\t\t11.退出\n"); printf("\t\t\t\t选择功能选项(输入所选功能前的数字):"); fflush(stdin); /*可用可不用,用于清除缓存防止下次用scanf输入是出现错误*/ scanf("%d",&as); switch(as) { case 1:system("cls"); input(); break; case 2:system("cls"); display(); break; case 3:system("cls"); sort(); break; case 4:system("cls"); insert(); break; case 5:system("cls"); del(); break; case 6:system("cls"); modify(); break; case 7:system("cls"); find(); break; case 8:system("cls"); read(); break; case 9:system("cls"); del_file(); break; case 10:system("cls"); save(); break; case 11:system("exit"); exit(0); default:system("cls"); goto start; } }while(1);/*while(1),1表示真,所以while(1)表示永远循环下去, */ /*至此功能选择结束*/ } void input()/*原始数据录入模块*/ { int i=0; char ch; do { printf("\t\t\t\t1.录入学员信息\n输入第%d个学生的信息\n",i+1); printf("\n输入学生学号:"); scanf("%u",&stu[i].no); fflush(stdin); printf("\n输入学生姓名:"); fflush(stdin); gets(stu[i].name); printf("\n输入学生性别:"); fflush(stdin); gets(stu[i].sex); printf("\n输入学生成绩1:"); scanf("%f",&stu[i].score1); printf("\n输入学生成绩2:"); fflush(stdin); scanf("%f",&stu[i].score2); printf("\n输入学生成绩3:"); fflush(stdin); scanf("%f",&stu[i].score3); printf("\n\n"); i++; now_no=i; printf("是否继续输入?(Y/N)"); fflush(stdin); ch=getch(); system("cls"); } while(ch!='n'&&ch!='N'); system("cls"); } void sort()/*排序数据函数*/ { struct student temp; int i,j; average(); for(i=1;i<now_no;i++) { for(j=1;j<=now_no-i;j++) { if(stu[j-1].ave<stu[j].ave) { temp=stu[j]; stu[j]=stu[j-1]; stu[j-1]=temp; } } } printf("排序以完成进入功能2可进行显示\n"); system("pause"); system("cls"); } void sort1()/*排序数据函数*/ { struct student temp; int i,j; for(i=1;i<now_no;i++) { for(j=1;j<=now_no-i;j++) { if(stu[j-1].score1<stu[j].score1) { temp=stu[j]; stu[j]=stu[j-1]; stu[j-1]=temp; } } } } void sort2()/*排序数据函数*/ { struct student temp; int i,j; for(i=1;i<now_no;i++) { for(j=1;j<=now_no-i;j++) { if(stu[j-1].score2<stu[j].score2) { temp=stu[j]; stu[j]=stu[j-1]; stu[j-1]=temp; } } } } void sort3()/*排序数据函数*/ { struct student temp; int i,j; for(i=1;i<now_no;i++) { for(j=1;j<=now_no-i;j++) { if(stu[j-1].score3<stu[j].score3) { temp=stu[j]; stu[j]=stu[j-1]; stu[j-1]=temp; } } } } void display()/*显示数据函数*/ { int i; char as; average(); do { printf("\t\t\t班级学生信息列表\n"); printf("\t学号\t\t姓名\t性别\t成绩1\t成绩2\t成绩3\t平均值\n"); for(i=0;i<now_no&&stu[i].name[0];i++) printf("\t%u\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n",stu[i].no,stu[i].name,stu[i].sex,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].ave); printf("\t\t按任意键返回主菜单."); fflush(stdin); as=getch(); } while(!as); system("cls"); } void insert()/*插入数据函数*/ { char ch; do { printf("\n\t\t输入新插入学生信息\n"); printf("\n输入学生学号:"); scanf("%u",&stu[now_no].no); fflush(stdin); printf("\n输入学生姓名:"); fflush(stdin); gets(stu[now_no].name); printf("\n输入学生性别:"); fflush(stdin); gets(stu[now_no].sex); printf("\n输入学生成绩1:"); fflush(stdin); scanf("%f",&stu[now_no].score1); printf("\n输入学生成绩2:"); fflush(stdin); scanf("%f",&stu[now_no].score2); printf("\n输入学生成绩3:"); fflush(stdin); scanf("%f",&stu[now_no].score3); printf("\n\n"); now_no=now_no+1; sort(); printf("是否继续输入?(Y/N)"); fflush(stdin); ch=getch(); system("cls"); } while(ch!='n'&&ch!='N'); } void del()/*删除数据函数*/ {unsigned long inum; int i; printf("输入要删除学生的学号:"); fflush(stdin); scanf("%u",&inum); for(i=0;i<now_no;i++) { if(stu[i].no==inum) { if(i==now_no)now_no-=1; else { stu[i]=stu[now_no-1]; now_no-=1; } sort(); break; } } system("cls"); } void save()/*保存数据函数*/ { FILE *fp; int i; char filepath[20]; printf("输入要保存的文件路径:"); fflush(stdin); gets(filepath); if((fp=fopen(filepath,"w"))==NULL) { printf("\n保存失败!"); exit(0); } for(i=0;i<now_no;i++) { stu[i].sum=stu[i].score1+stu[i].score2+stu[i].score3; stu[i].ave=stu[i].sum/3; fprintf(fp,"\t%u\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n",stu[i].no,stu[i].name,stu[i].sex,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].ave); } fclose(fp); printf("学生信息已保存在%s中!\n",filepath); system("pause"); system("cls"); } void find()/*查询函数*/ { int i; char str[20],as; do { printf("输入要查询的学生姓名:"); fflush(stdin); gets(str); for(i=0;i<now_no;i++) if(!strcmp(stu[i].name,str)) { printf("\t学号\t\t姓名\t性别\t成绩1\t成绩2\t成绩3\t平均值\n"); printf("\t%u\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n",stu[i].no,stu[i].name,stu[i].sex,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].ave); } printf("\t\t按任意键返回主菜单."); fflush(stdin); as=getch(); } while(!as); system("cls"); } void average()/*求平均数*/ { int i; for(i=0;i<now_no;i++) { stu[i].sum=stu[i].score1+stu[i].score2+stu[i].score3; stu[i].ave=stu[i].sum/3; } } void modify()/*修改数据函数*/ { int i; char str[20]; printf("输入要修改的学生姓名:"); fflush(stdin); gets(str); for(i=0;i<now_no;i++) { if(!strcmp(stu[i].name,str)) { system("cls"); printf("\n\t\t输入新插入学生信息\n"); printf("\n输入学生学号:"); fflush(stdin); scanf("%u",&stu[i].no); printf("\n输入学生性别:"); fflush(stdin); gets(stu[i].sex); printf("\n输入学生成绩1:"); fflush(stdin); scanf("%f",&stu[i].score1); printf("\n输入学生成绩2:"); fflush(stdin); scanf("%f",&stu[i].score2); printf("\n输入学生成绩3:"); fflush(stdin); scanf("%f",&stu[i].score3); printf("\n\n"); sort(); break; } } system("cls"); } void read() { FILE *fp; int i; char filepath[20]; printf("输入要读入的文件路径:"); fflush(stdin); gets(filepath); if((fp=fopen(filepath,"r"))==NULL) { printf("找不到%s文件!\n",filepath); system("pause"); exit(0); } now_no=0; for(i=0;i<MAX&&!feof(fp);i++)
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服