已阅读5页,还剩35页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
面向对象编程实验报告题目: 成绩管理系统设计与实现 学生姓名: 学 号: 院 (系): 专 业: 2016 年 7 月 5 日目录一、实验目的3二、实验内容3三、实验环境3四、设计思路或方案31.信息录入:32.采用文件保存信息的方法33.定义结构体44.设计函数接口完成相关功能4五、程序清单41.头文件:42.函数实现53.主函数26六、调试结果及分析35七、总结42一、实验目的 用C+语言,实现对成绩管理系统的设计与实现,程序要有信息维护,信息查询,成绩统计,成绩排序这些功能,通过本次设计,提高用C+编写程序的能力,更加熟悉C+编程语言。实验内容二、实验内容用C+编写 成绩管理系统,实现了以下功能:(1)信息维护:学生信息数据要以文件的形式保存,能实现学生信息数据的维护。此模块包括子模块有:增加学生信息、删除学生信息、修改学生信息(2)信息查询:要求:查询时可实现按姓名查询、按学号查询(3)成绩统计:可统计出所有课程在各个分数段的情况。(4)排序:把每一门的课程的成绩进行降序排列三、实验环境编译器:VS2013操作系统:Windows8.0四、设计思路或方案1.信息录入:初次使用成绩管理系统,我们让用户将必要的信息录入进去。由用户设置学生总数,课程总数,学期数,以及一些基本信息。之后就可以直接从文件里读取数据。2.采用文件保存信息的方法将学生基本信息,课程信息,成绩信息,分别保存在三个文件里,打开文件时,依次将三个文件打开。每次保存文件时,由用户自己输入文件名,可多次录入不同批次的学生,只要将这些信息保存到不同的文件中即可。需要哪些学生的信息,再次进入系统就读入哪些文件信息。比如,可将不同年级的学生信息分开存放。3.定义结构体内容包括,学生班级,学号,姓名,成绩。4.设计函数接口完成相关功能1输入学生的成绩信息,包括学号、姓名、性别等基本信息和各科成绩函数2显示全部学生各科成绩信息函数3对各科分班进行成绩统计分析,计算总分、平均分、最高分、最低分、及格率函数4统计各个科目各分数段人数及班级信息函数5按学号或姓名查找并显示某个学生的各科成绩函数6按课程成绩或总分由高到低排序显示函数7更新某个学生的基本信息或课程成绩函数五、程序清单1.头文件:#define _CRT_SECURE_NO_WARNINGS 1#ifndef _GRADE_H_#define _GRADE_H_#include #include #include #include #include #include #include using namespace std;const int SIZE = 20;struct studentchar classnumSIZE; /班级 char idSIZE; /学号 char nameSIZE; /姓名 int *score;void input(student p, string c_name, int s_num, int c_num); /输入学生的成绩信息,包括学号、姓名、性别等基本信息和各科成绩 void show(student p, string c_name, int s_num, int c_num); / 显示全部学生各科成绩信息; void statistic(student p, string c_name, int s_num, int c_num);/对各科分班进行成绩统计分析,计算总分、平均分、最高分、最低分、及格率等; void section(student p, string c_name, int s_num, int c_num); /统计各个科目各分数段人数及班级信息; void search(student p, string c_name, int s_num, int c_num); /按学号或姓名查找并显示某个学生的各科成绩; void sort(student p, string c_name, int s_num, int c_num); /按课程成绩或总分由高到低排序显示; void update(student p, string c_name, int s_num, int c_num); /更新某个学生的基本信息或课程成绩; void quicksort(int s, int l, int r); /快速排序 void fileout(student p, string c_name, int s_num, int c_num, int semester);/文件形式输出 #endif2.函数实现#includehead.hvoid input(student p, string c_name, int s_num, int c_num)for (int i = 0; i0)cout *;cout *请继续输入*;cout *;cout endl;cout 请输入第 i + 1 个学生的班级(例如:网络142):;cin.get(pi.classnum, SIZE);cin.get();while (!cin.good()cin.clear();cin.sync();cout 输入有误!请重新输入: ;cin.get(pi.classnum, SIZE);cin.get();cout 请输入 i + 1 个学生的学号:;cin.get(pi.id, SIZE);cin.get();while (!cin.good()cin.clear();cin.sync();cout 输入有误!请重新输入: ;cin.get(pi.id, SIZE);cin.get();for (int k = 0; ks_num; k+)if (k = i)k+;if (strcmp(pk.id, pi.id) = 0)cout 与已有学生的学号重复,请重新输入:;cin.get(pi.id, SIZE);cin.get();while (!cin.good()cin.clear();cin.sync();cout 输入有误!请重新输入: ;cin.get(pi.id, SIZE);cin.get();cout 请输入其姓名:;cin.getline(, SIZE);while (!cin.good()cin.clear();cin.sync();cout 输入有误!请重新输入: ;cin.getline(, SIZE);for (int j = 0; jc_num; j+)cout 请输入 c_namej *(pi.score + j);cin.get();while (!cin.good()cin.clear();cin.sync();cout *(pi.score + j);cin.get();while (*(pi.score + j)100 | *(pi.score + j)0)cout *(pi.score + j);cin.get();while (!cin.good()cin.clear();cin.sync();cout *(pi.score + j);cin.get();system(pause);system(cls);void show(student p, string c_name, int s_num, int c_num)cout *;cout 科目:tt;for (int j = 0; j c_num; j+)cout t c_namej;cout endl;cout *;for (int i = 0; is_num; i+)cout pi.classnum 班: :;cout t;for (int j = 0; jc_num; j+)cout *(pi.score + j) t;cout endl;cout *;system(pause);system(cls);void statistic(student p, string c_name, int s_num, int c_num)int sum, ave, max, min, pass, trigger, cl_num;double pass_rate;for (int i = 0; ic_num; i+)cout 【 c_namei 科目】 endl;for (int k = 0; ks_num; k+)sum = 0;trigger = 0;ave = 0;cl_num = 0;pass_rate = 0;pass = 0;max = *(pk.score + i);min = *(pk.score + i);int j;for (j = 0; jk; j+)if (strcmp(pk.classnum, pj.classnum) = 0)trigger = 1;if (trigger = 1)continue;for (j = k; jmax)max = *(pj.score + i);if (*pj.score + i)= 60)pass+;cout pk.classnum 班 endl;cout *;cout 总分为: sum ;ave = sum / cl_num;cout 平均分为: ave ;cout 最高分为: max ;cout 最低分为: min ;pass_rate = (1.0*pass) / cl_num;cout 及格率为: pass_rate * 100 % endl;cout *;system(pause);system(cls);void section(student p, string c_name, int s_num, int c_num)int s_nopass, s_60, s_70, s_80, s_90, trigger;for (int i = 0; ic_num; i+)cout 【 c_namei 】;for (int k = 0; ks_num; k+)trigger = 0;s_nopass = 0;s_60 = 0;s_70 = 0;s_80 = 0;s_90 = 0;for (int j = 0; jk; j+)if (strcmp(pk.classnum, pj.classnum) = 0)trigger = 1;if (trigger = 1)continue;for (int j = k; j= 90)s_90+;else if (*(pj.score + i) = 80)s_80+;else if (*(pj.score + i) = 70)s_70+;else if (*(pj.score + i) = 60)s_60+;else if (*(pj.score + i)60)s_nopass+;cout endl;cout pk.classnum 班 endl;cout *;cout 不及格: s_nopass 人 ;cout 60至70分: s_60 人 ;cout 70至80分: s_70 人 ;cout 80至90分: s_80 人 ;cout 90至100分: s_90 人 endl;cout *;system(pause);system(cls);void search(student p, string c_name, int s_num, int c_num)char name_or_idSIZE;cout 请输入学号或名字:;cin.get(name_or_id, SIZE);cin.get();while (!cin.good()cin.clear();cin.sync();cout 输入有误!请重新输入: ;cin.get(name_or_id, SIZE);cin.get();cout *;int n = 0;for (int i = 0; is_num; i+)if (strcmp(, name_or_id) = 0 | strcmp(pi.id, name_or_id) = 0)n+;cout 学号 pi.id 的 同学的成绩如下: endl;cout *;for (int j = 0; jc_num; j+)cout c_namej 科目: *(pi.score + j) 分 ;cout endl;cout *;if (n = 0)cout 没有这名同学的信息。 endl;system(pause);system(cls);void sort(student p, string c_name, int s_num, int c_num)int *score_s = new ints_num;for (int i = 0; ic_num; i+)for (int j = 0; js_num; j+)score_sj = *(pj.score + i);quicksort(score_s, 0, s_num - 1);cout 【 c_namei 】由高到低的分数排序如下: endl;cout *;for (int j = 0; js_num; j+)cout score_sj 分 ;cout endl;cout *;system(pause);system(cls);delete score_s;void update(student p, string c_name, int s_num, int c_num)char name_or_idSIZE;cout 请输入学号或名字:;cin.get(name_or_id, SIZE);cin.get();char ch;int n = 0;for (int i = 0; is_num; i+)if (strcmp(, name_or_id) = 0 | strcmp(pi.id, name_or_id) = 0)n+;cout 请选择要执行的操作: endl;cout *;cout (a)更新学生的基本信息 (b)更新学生的成绩 endl;cout (q)结束 endl;cout *;cout 输入:;cin.get(ch);cin.get();cout *;if (ch != q)if (ch = a)cout 请输入其班级(例如:自动化1122):;cin.get(pi.classnum, SIZE);cin.get();cout *;while (!cin.good()cin.clear();cin.sync();cout 输入有误!请重新输入: ;cin.get(pi.classnum, SIZE);cin.get();cout *;cout 请输入其学号:;cin.get(pi.id, SIZE);cin.get();cout *;while (!cin.good()cin.clear();cin.sync();cout 输入有误!请重新输入: ;cin.get(pi.id, SIZE);cin.get();cout *;for (int k = 0; ks_num; k+)if (k = i)k+;if (strcmp(pk.id, pi.id) = 0)cout 与已有学生的学号重复,请重新输入: endl;cin.get(pi.id, SIZE);cin.get();cout *;while (!cin.good()cin.clear();cin.sync();cout 输入有误!请重新输入: ;cin.get(pi.id, SIZE);cin.get();cout *;cout 请输入其姓名:;cin.getline(, SIZE);cout *;while (!cin.good()cin.clear();cin.sync();cout 输入有误!请重新输入: ;cin.getline(, SIZE);cout *;else if (ch = b)for (int j = 0; jc_num; j+)cout 请输入 c_namej *(pi.score + j);cin.get();cout *;while (!cin.good()cin.clear();cin.sync();cout *(pi.score + j);cin.get();cout 100 | *(pi.score + j)0)cout *(pi.score + j);cin.get();while (!cin.good()cin.clear();cin.sync();cout *(pi.score + j);cin.get();cout *;elsecout 输入有误,请重新输入:;cin.get(ch);cin.get();cout *;if (n = 0)cout 没有这名同学。 endl;cout *;system(pause);system(cls);void fileout(student p, string c_name, int s_num, int c_num, int semester)ofstream fout;char fnameSIZE;char _fname1SIZE = basic_;char _fname2SIZE = course_;char _fname3SIZE = student_;cout 请输入要保存的文件名(需要加上后缀.txt):;cin.getline(fname, SIZE);strcat(_fname1, fname);strcat(_fname2, fname);strcat(_fname3, fname);fout.open(fname);for (int i = 0; is_num; i+)fout * endl;fout 【个人信息】;fout 姓名: 班级: pi.classnum 班 学号: pi.id endl;fout * endl;fout 【成绩】;for (int j = 0; jc_num; j+)fout c_namej : *(pi.score + j) ;fout endl;fout * endl;fout endl;fout.close();fout.open(_fname1);fout s_num endl;fout semester endl;fout c_num endl;fout.close();fout.open(_fname2);for (int i = 0; ic_num; i+)fout c_namei endl;fout.close();fout.open(_fname3);for (int i = 0; is_num; i+)fout pi.classnum endl;fout pi.id endl;fout endl;for (int j = 0; jc_num; j+)fout *(pi.score + j) endl;cout 已输出到 fname 中。 endl;system(pause);system(cls);void quicksort(int s, int l, int r)if (lr)int i = l, j = r, x = sl;while (ij)while (ij&sj = x)j-;if (ij)si+ = sj;while (i= x)i+;if (ij)sj- = si;si = x;quicksort(s, l, i - 1);quicksort(s, i + 1, r);3.主函数#includehead.hint main()cout 欢迎使用本系统! endl;cout * endl endl;cout *学生成绩管理系统* endl endl;cout * endl;int n = 0;int student_num;/学生数 int semester;/学期 int cour_num;/课程数 cout first_sel;cin.get();while (tolower(first_sel) != y&tolower(first_sel) != n)cout first_sel;cin.get();if (tolower(first_sel) = y)ifstream fin;n = 1;cout * 说明: * endl;cout * 如上次保存的文档名为student.txt * endl;cout * 则读取的文档名为basic_student.txt。 * endl;cout 请输入基本信息文档名:;char _fnameSIZE;cin.getline(_fname, SIZE);fin.open(_fname);while (!fin.is_open()cout student_num;fin.get();fin semester;fin.get();fin cour_num;fin.get();fin.close();system(pause);system(cls);elsecout student_num;while (!cin.good()cin.clear();cin.sync();cout student_num;cin.get();cout semester;while (!cin.good()cin.clear();cin.sync();cout student_num;cin.get();cout 请输入第 semester cour_num;cin.get();while (!cin.good()cin.clear();cin.sync();cout 输入有误!请重新输入第 semester cour_num;cin.get();student *p = new studentstudent_num;string *cour_name = new stringcour_num;if (tolower(first_sel) = y)ifstream fin;cout * 说明: * endl;cout * 如上次保存的文档名为student.txt * endl;cout * 则读取的文档名为course_student.txt。 * endl;cout
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026-2031中国光学仪器市场供需发展前景及投资战略预测报告
- 旅游形象与地方特色融合-洞察及研究
- 基于时间价值理论的建筑工程合同风险管理研究-洞察及研究
- 滑膜炎中免疫细胞信号通路的解析-洞察及研究
- 2026中国医药质量市场发展趋势与前景展望战略研究报告
- 钢铁厂安全生产责任考核办法
- 低压配电线路施工组织设计模板
- 高校专利申请及技术转移操作流程
- 企业财务预算编制参考模板
- 初中生物课堂教学反思范文
- 【MOOC】药事法规-中国药科大学 中国大学慕课MOOC答案
- 旅游景区服务质量提升培训
- 药店医保内部管理制度模版(3篇)
- 医院采购窗帘合同模板
- 制氢技术与工艺 课件 第5章 电解水制氢
- 【课件】纪念与象征-空间中的实体艺术+课件-高中美术人美版(2019)美术鉴赏
- 水利水电工程资料员手册
- 《道德经》的智慧启示-知到答案、智慧树答案
- 尼莫地平在蛛网膜下腔中应用
- GB/T 232-2024金属材料弯曲试验方法
- 2015年10月浙江省自考00504艺术概论试题及答案含解析
评论
0/150
提交评论