中南大学C课程设计.docx

上传人:文*** 文档编号:83246629 上传时间:2023-03-29 格式:DOCX 页数:73 大小:468.92KB
返回 下载 相关 举报
中南大学C课程设计.docx_第1页
第1页 / 共73页
中南大学C课程设计.docx_第2页
第2页 / 共73页
点击查看更多>>
资源描述

《中南大学C课程设计.docx》由会员分享,可在线阅读,更多相关《中南大学C课程设计.docx(73页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、中南人学二二一三学年第二学期信息科学与工程学院计算机与程序设计语言课程设计报告课程名称:计算机与程序设计语言C+班 级:电气信息2012级1207班学 号: 0909120703姓 名:黎毅刚指导教师:同遥二一三年七月日录一.需求分析二,程序结构三.算法分析四.运行结果五.学之心得六.程序源码一.需求分析(一)小型学生成绩管理系统1、需要处理的基础数据令 学生基本信息:如班级、学号、姓名、性别、年龄、宿舍号码、电话号 码等。 学生选修课程的基本信息:课程编号、课程名称、考试成绩、平时成绩、 综合成绩、学分、重修否等。2、系统的基本功能数据的录入:如录入学生的基本信息,以及该学生选修课程的基本信

2、息;数据的修改:如修改指定学号、或者指定姓名的学生信息,或者修改其 选修课程信息;数据的插入:插入某个学生信息;数据的查询:如按学号查询、按姓名查询等;令数据的删除;如删除指定学号、或者指定姓名的学生及其选修课程信息;平均成绩的计算:计算每个学生各门功课的平均成绩,并按平均成绩从 高到低的次序输出学生信息:令 列出不及格学生清单(学号、姓名、不及格的课程和成绩)。今考虑用文件把数据保存起来(可选)。二.程序结构(1)程序框图湖览全部信息妝平均分排序仙入学牛信息学生信息改学生信息4 作 操break功能模块的划分与功能实现一.输入学生信息利用友元函数:friend void lnput(Stu

3、stud)可以实现,学生 基本信息和课程信息的录入的功能,并且能够能够将信息保存到 student.dat 文件中。二.浏览统计信息利用友元函数:friend void Statistic(Stu stud)可以实现,浏 览学生的基本信息和平均分数信息的功能三.查询学生信息利用友元函数:friend void Lookup(Stu stud)可以实现,分别 按学号和姓名两种方式来查询信息的功能。四.修改学生信息利用友元函数:friend void Modify(Stu stud)可以实现,分别按 学号和姓名两种方式来修改信息的功能,修改后的信息可以保存进文 件中。五.删除学生信息利用友元函数:

4、friend void Delete(Stu stud)可以实现,分别按学 号和姓名两种方式来删除信息的功能,删除后的信息可以保存进文件 中。六.插入学生信息利用友元函数:friend void Insert(Stu stud)可以实现,插入的学生信息可以保存进文件中。七.按平均分排序利用友元函数:friend void Sort(Stu stud)可以实现,按每名学 生的平均分进行降序排序的功能。.浏览全部信息利用友元函数:friend void Output(Stu stud)可以实现,一次性浏 览学生全部信息的功能,包括课程是否从修的信息等。九.不及格学生清单利用友元函数:friend

5、void Showfail(Stu stud)可以实现,输出不 及格学生的信息和不及格的课程的功能。十.退出管理系统利用函数exit(l)就可轻松退出管理系统。三.算法分析(1)整体部分先要建立一个课程类class Course,并且包含课程编号、课程名称、 平时成绩、末考成绩、综合成绩、是否重修等数据成员。再建立一个学生类class Stu,并且包含班级、学号、姓名、性别、 年龄、宿舍号码、电话号码、课程数目、名次等数据成员,而且还要 在学生类中建立一个课程类的对象数组Course course20 建立一个友元函数friend void Write(Stu stud ,int n),来实现

6、将各 种更新的数据的保存进文件student.dat中。(4)建立一个友元函数friend int Read(Stu stud),来读取文件中的数 据,并且返回文件中保存数据的学生个数return count建立一个菜单函数int menu();来实现对系统主界面的输出,以及 返回不同的操作指令,从而实现不同的函数功能。(2)功能实现部分主函数部分(一)先建立学生类的对象Stustud100()利用for循环for(;),菜单函数和switch函数-switch(menu()来实现系统不同功能的运行。输入学生信息部分(一)利用 while 循环while(sign!=n&sign!=N)和 f

7、or 循环ffor(j=0; jstudi.num_of_course; j+)来实现对学生数据的输入。(二)利用10op循环,这个VB中的循环来防止学号重复的问 题。利用Write函数来将数据保存进文件中。浏览学生统计信息部分(一)通过 Read 函数int n=Read(stud);和 for 循环 for(int i=0;in;i+)来对学生的学号、姓名、班级和平均分进行 输出査询学生信息部分(一)通过 Read 函数 int n=Read(stud);和 switch 函数今 switch(choose)来实现分别按学号和姓名查询学生信息的 功能(二)通过定义变量 int b=0; i

8、nt p=0;for循环和if语句for(i=0;in;i+)for(i=0;in;i+)if(studi.num=a)if(studi.name=name 1)b+;P+;if(b=O)(cout对不起,查无此人,请确认学号是否正确endl;if(p=O)cout对不起,查无此人,请确认姓名是否正确endl;来输出报错信息。修改学生信息部分(一)通过 Read 函数 int n=Read(stud);和 switch 函数 switch(choose)以及for循环来实现分别按学号和姓 名修改学生信息的功能,并且还要通过Write函数, 将修改过后的信息保持进文件中。(-)和的功能相同,通过

9、样的方法,可以输出报 错信息。删除学生信息部分(一)通过 Read 函数9 int n=Read(stud);和 switch 函数 switch(choose)以及for循环来实现分别按学号和姓 名学生信息的功能(二)通过不断地给前一位学生类对象赋值的方法for(i=0;in-l;i+)if(studi.name=name 1)studi=studi+l;n-;cout提示:已成功删除!endl; 并且在还要记得学生的个数要减去1fn-;然后再保存数据Write(stud,n);(三)报错信息的实现跟一样。發插入学生信息(一)利用 while 循环 while(s!=n&s!=N) for

10、循环今 for(j=0; jstudln.num_of_course; j+)来实现学生信 息的插入(二)通过Write函数及时的将数据保存起来。按平均分排序部分(一)通过冒泡法可以实现对学生平均成绩的降序排列for(i=0; in-l; i+)for(j=0; jn-l-i; j+)if(studj.averagestudj+l.average)(Stu temp;temp=studj;studj=studj4-l;studj+l=temp;)(二)利用for循环来对学生的成绩进行排名for(i=0; i9llc9llc0);retum(c);)结果如下:自心入. 输. 茎堆 看意 ,始 玛

11、按2 心息.電畲意序登偵统I E或亠恒田信士亘二!生系 f生生计生生生生璽学理 片事麴麥事學黄島 f 用人普改除入平览及岀 i 查修鹏芻畲宀 Ti f亲 宀第二个防止按姓名和学号的方式来查询、删除、修改时的错误操作部分代码如下:coutvvendkv”*查找学生成绩 *Hendl;do(coutvv”请选择查找方式:1.按学号查询2.按姓名查询 endl;cinchoose; while(choose2);结果如下:学生信息录入以及处理功能(-)利用loop循环来实现避免输入重复学号的功能部分代码如下:loop:/loop 循环coutv学号:“;cinstudi.num;int c=0;wh

12、ile(ci)(C+;if(studi.num=studi-c.num) (coutvv”你输入的学号已经存在!请重新输入。” vvendl;goto loop;结果如下:(二)可以实现不同学生不同科目数和不同科目的操作要求。部分代码如下:cout”请输入需要登记的学科数目:;cinstudi.num_of_course;intj;float sum=0;for(j=0; jstudi.num_of_course; j+)(coutvv”请登记第”j+lv”门课的信息:Mendl;结果如下:D:程序没实验报告、Debug80.exe哥案号 入记编iis71j 知 青0S掇 SS- 1卬逐1与曰

13、 1、(三)当输入学生的平时成绩和末考成绩时,可以计算出 学生的综合成绩(平时占30%,期末占?0%),并 且能够是否需要重修,还能算出学生的平均成绩, 用于以后的排序。部分代码如下:for(j=0; jstudi.num_of_course; j+)(coutvv”请登记第vj+1 v”门课的信息:“ vvendl;coutvv”课程编号:;cinstudi .coursej .course_num;coutvv”课程名称:;cinstudi.course|j.course_name;coutvv”平时成绩:;cinstudi.coursej.regular_score;coutvv”末考成

14、绩:;cinstudi.coursej.final_score;coutvv”学分:”;cinstudi.course|j.study_score;studi.course|j.zonghe_score=studi.coursej.regular_score*0.3+studi.course|j.final_score*0.7;求综合成绩coutvv”该门课的综合成绩是:“ vvstud .coursejzonghe_scorevvendl;if(studi.course j.zonghe_score60)studi.courseUJ.rebulid=,n;elsestudi.course|j

15、.rebulid=否;coutvv”是否重修:nstudi.course|j.rebulidendl;sum=sum+studi.course|j.zonghe_score;/Z 综合成绩的总和 )studi.average=sum/studi.num_of_course;coutH该学生这几门课的平均分为:,studi.averageendl;coutvv”提示:是否继续写入学生成绩?(Y/N)”;cinsign;i+;Write(stud,i);调用文件写入函数,把信息写入文件)结果如下:查询、修改、删除的错误提示功能(利用for循环和if语句来实现的)部分代码如下:int b=0;int

16、 p=0;if(studi.num=num 1)(b+;if(b=O)coutvc对不起,系统中没有此人,请确定学号是否正确vvendl;运行结果如下:注:修改和删除功能实现的原理与上面的样,一下不做赘余。按平均分排序时,还能实现学生名次的输出功能部分代码如下:for(i=0; in; i+)studi.order=i+l;结果如下:浏览学生全部信息时的浏览界面功能运用两个for循环可以很直观的浏览到学生的各方面的信息,包括学生的课程是否重修等代码如下:void Output(Stu stud)输出全部学生信息( system(cls);int n=Read(stud);coutendln*

17、显示全部学生信息 *Hendl; if(!stud)coutv没有记录;else (for(int i=0; in; i+)coutnnendl;coutvv”基本信息: vvendl;coutsetw(8)班级 Msetw(12),学号 nsetw(8)H 姓名 ”vvsetw(8)vv” 年龄 Hsetw(8)n 性别 vvsetw( 12)n 宿舍电话 nsetw(l 2)n 个人电话 nendl;coutsetw(8)studi.class_numsetw(12)studi.numsetw(8)studi.namesetw(8) studi.agesetw(8)studi.sexset

18、w(12)studi.roomsetw(12)studi.telendl;coutvv”成绩信息:endl;for(int j=0; jstudi.num_of_course; j+)(coutsetw(8)studi.coursej.course_namesetw(6) 电 修 “vvsetw(6)vv”学分 vvendl;coutsetw(8)studi.coursej.zonghe_scoresetw(6)studij.coursej.rebulidsetw(6)s tudi.course|j.study_scoreendl;)cout”所有科目平均分:” vstudi.averagev

19、vendl;)coutendlMMendlendl;1)运行结果:不及格学生清单的输出功能部分代码如下:void Showfail(Stu stud)不及格学生清单(intj;system(,clsn);int n=Read(stud);cout部分不及格学生信息显示如下=endl; if(!stud)(coutv对不起,现在还没有学生信息记录! nendl;exit(l);)else(for(int i=0; in; i+)(for(j=0; jstudi.num_of_course; j+)if(studi .course|j .zonghe_score60) coutsetw(8)班级

20、Hsetw(l 2)M 学号 nsetw(8)M 姓名nendl;coutsetw(8)studi.class_numsetw(12)studi.numsetw(8)studi.nameendl; coutvv”其不及格科目如下:“vvendl;break;for( j=0; jstudi.num_ofLcourse; j+)(if(studi.course|j.zonghe_score60)(coutstudi .course j .course_namen:”;coutstudi .course|j .zonghe_scoreendl;)结果如下:四.运行结果输入学生信息8的数宗鼠是 绩

21、成雙英”4 6课h自3 亠一目 数用 登lial高90是納人 绩鞄写 成不 K:甌:1:2要综*21 综切否U 湯9男曹賣绩5的貰。!pW绩3的修4是 蜴:1入记成.课重记成.课重胜. 當別舍人彎,时奏円否登毒时麦不靖示浏览统计信息班旷号姓名平均凝120 班909120703茅奉刚70.951207 班909120704枷铁68.45请按任意键继续半:查询学生信息592 1290黎1907170球 级号喜别舍人数语均卜=但|bqb!oDebug80.exe请选择查找方式,1:弱学号查询2.按姓名查询 请输入要查询的学号,09091207037 5Ti 0 1 9 52问 1 2 -7 I段 :

22、8 1 0 0 9 5 SS - - 72 0 A 9 耳、lil 0 : 1 9变1早” 17 7AJ 级号畲别舍人数语均 班学姓年性4冋英平半:修改学生信息909120803一该学生取信息1208 909120803性别 男年龄宿舍电话演能人需要登记的空科数目:101物理 78F时成绩茂嚟,86 ! J I、I J I,7 ,靑否重修:否鳄生这疝课的平均分为I 83.6T* 1-L. 1 n2.按姓名修改*修改学生信息 * 择修改信息独花 .按学号修改个人电话04狂 2壬:1 : 08号09名三龄注:按姓名修改以上面的相似删除学生信息删除前:删除后:插入学生信息清排任意域维经-目斗:文下功

23、”4晶02语嘉01入宗奈玉量i豊性年性W遣羊玄至9若!?察绩5的聲義绫3的修寶 寻:1人!6成,理重记3成河一継臨登後髙”S6插入后:按平均分排序浏览学生全部信息 ; D:程序设计X实蛉报告、Debug86.exe* 显示全部学生信息宿舍电话个人电话年龄班缴 学号基本信息:h理重修学分83.6 否 3所有科目平均分:83.6年龄性别宿舍电话个人电话名刚 姓李号04 学09分5分3 9 学学?.09管酱否分 息證息数.4文.4目 媒09俱咼49语86科 本12績 有 国 或 陆不及格学生清单退出管理系统菠礬自心i 一心息息息息息序登俏统 i生生计生生生生重学理 i用人普改除入平览及出 查修體芻布

24、装请输入你需要的操作.Mi五,学之心得通过这将近两个星期的的程序设计,从中收获了许多。还记得第一次收到课程设计任务书时,心情非常沉重,看到 这么难的题目,感觉这次课程设计是要挂的节奏。不过从网上找到 些参考代码之后,感觉又有救了。不过,还有一些新增的功能需要自己去想应该怎样去实现,例 如,那个课程操作数的功能实现,想了好久,求助了很多同学,失败 了很多次,实现了这些功能,难道这就是程序员悲惨的命运吗。不过看似很好的代码,运行起来,各种bug,有种想哭的冲 动,修修改改,来回的折腾,不过程序中还是有一些不足,例如程序 的输入功能不完善,之后输入的数据会把之前的数据给替换掉。还有 插入的数据只能放

25、在最后,不能随便插在任意位置。面对以上的这些不足,看来我今后还得在C+上多下点功夫, 多上机,多看点程序积累经验。不过这次上机也培养了我独立思考和 理解程序的能力,希望在今后的学习中还会有所提高。最后还要感谢汤哲老师和向遥老师的指导。六、程序源代码#include #include #include 后面的exit函数和syetem函数要用#include #include using namespace std;class Course定义个课程信息类public:int course_num;课程编号string course_name;课程名称float regular_score;平时

26、成绩float final_score;末考成绩float zonghe_score;综合成绩float study_score;学分 string rebulid;是否重修);class Stupublic:friend void Input(Stu stud); 学生信息输入函数friend void Statistic(Stu stud);学生信息输出函数friend void Lookup(Stu stud); 学生信息查询函数friend void Modify(Stu studJ); 学生信息修改函数friend void Delete(Stu stud); 学生信息删除函数fri

27、end void Output(Stu stud); 学生全部信息输出函数friend void Sort(Stu stud);学生成绩排序函数friend void Insert(Stu stud); 学生信息插入函数friend void Write(Stu stud,int n);学生成绩写入文件函数friend int Read(Stu stud);学生成绩信息读取函数friend void Showfail(Stu studl); 不及格学生名单private:string class_num;int num;string name;int age;string sex;int ro

28、om;string tel;float average;int num_of_course;int order;Course course20;);void Write(Stu stud,int n)文件写入函数(fstream myFile;定义个文件输入输出类myFile.open(student.dat,ios:outlios:binary);if(!myFile)coutstudent.dat cant open!endl;exit(l);)int count=n;my Fi lecountendlendl;for(int i=0; icount; i+)(myFilestudi.cl

29、ass_numstudi.numstudi.name studi.agestudi.sexstudi.roomstudi.tel studi.num_ofl,course studi.averageendl;for(int j=0; jstudi.num_of_course; j+)myFilestud i.course j .course_numstudi.coursej.course_name studi.coursej.regular_scorestud i .coursej .final_scorestudi.coursej.zonghe_score studi.coursej.stu

30、dy_score studi.coursej.rebulidendl;)myFile.close();)int Read(Stu stud)文件读取函数(fstream myFile;myFile.openCstudent.dat,ios:inlios:binary);if(!myFile)coutstudent.datcant open !endl;exit(l);int count;myFile.seekg(O);myFilecount;for(int i=0; icount; i+) myFilestudi.class_numstudi.numstudi.namestudi.age st

31、udi.sexstudi.roomstudi.telstudi.num_of_coursestudi. average;for(int j=0; jstudi.course j.regular_scorestudi.coursej.final_scorestudi.coursej.zonghe_scorestudi.co ursej.study_scorestud i.coursej.rebulid;)myFile.close();return count;函数返回一个查询出来的数值void Input(Stu stud)学生成绩录入函数system(cls);调用系统命令cis,清除屏幕in

32、t i=0;char sign;coutendl*请输入学生信息 *endl;while(sign!=n&sign !=N)(cout班级:;cinstudi.class_num;loop:/loop 循环cout学号:;cinstudi.num;int c=0;while(ci)(C+;if(studi.num=studi-c.num)cout你输入的学号已经存在!请重新输入。endl;goto loop;cout姓名:;cinstudi.name;coutcc年龄:;cinstudi.age;cout性别:;cinstudi.sex;cout宿舍电话;cinstudi.room;cout个

33、人电话;cinstudi.tel;cout请输入需要登记的学科数目:;cinstudi.num_of_course;int j;float sum=0;for(j=0; jstudi.num_of_course; j+)cout请登记第j+1门课的信息:endl;coutcc课程编号:;cinstudi.coursej.course_num;coutcc课程名称:;cinstudi .coursej .course_name;cout平时成绩:;cinstudi.course j .regular_score;cout末考成绩:cinstud i .course j .final_score;

34、cout学分:;cinstud i.coursej. study_score;studi.coursej.zonghe_score=studi.coursej.regular_score*0.3+studi.coursejf nal_score*0.7;求综合成绩cout该门课的综合成绩是:studi .coursefj .zonghe_scoreendl;if(studi.course j .zonghe_score60)studi.course j.rebulid=是;elsestudi.coursej.rebulid=否;cout 是 否 重 修:studi.coursej.rebuli

35、dendl;sum=sum+studi.course j.zonghe_score;/Z 综 合成绩的总和studi.average=sum/studi.num_ofLcourse;cout该学生这几门课的平均分为:studi.averageendl;cout提示:是否继续写入学生成绩?(Y/N);cinsign;i+;)Write(stud,i);调用文件写入函数,把信息写入文件)void Statistic(Stu stud)学生成绩统计数据信息输出函数system(cls);int n=Read(stud);coutsetw( 10)班级setw(l 2)学号setw( 10) 姓名se

36、tw(14)平均成绩”endl;for(int i=0; in; i+)coutsetw(10)studi.class_numsetw(12)studi.numsetw(10)studi.namesetw(14)studi.averageendl;system(pause);)void Lookup(Stu stud) 学生成绩查询函数(system(cls); 运行前清屏int n=Read(stud);int a,choose;string name 1;int i;int b=0;int p=0;coutendl*查找学生成绩 *endl;do(cout请选择查找方式:1.按学号查询2.

37、按姓名查询 endl;cinchoose;while(choose2);switch(choose)case 1:cout请输入要查询的学号:cina;for(i=0;in;i+)if(studi.num=a)(b+;coutendl;coutc”班级 stud.class_numendl;cout学 号:studi .numendl;cout姓名:studi.nameendl;cout年龄:studi.ageendl;coutc性另:stud i . sexendl;cout宿舍电话:stud.roomendl;cout个 人 电话:stud i .telendl;for(int j=0; jstudi.num_o匚course; j+)输出成绩信息coutstud i .coursej .course_name;coutstud i .course j .zonghe_scoreendl;cout平均 分:studi. ave rageendl;if(b=O)cout对不起,查无此人,请确认学号是否正确endl;break;case 2:cout请输入要查询的姓名:;cinnamel;for(i=0;in;i+)if(studi.name=name 1)P+; cout”学号:

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com