简单学生管理系统设计.doc
《简单学生管理系统设计.doc》由会员分享,可在线阅读,更多相关《简单学生管理系统设计.doc(20页珍藏版)》请在咨信网上搜索。
广州大学学生实验报告 开课学院及实验室:计算机科学与工程实验室 2011 年12月28日 学院 计算机科学于教育软件学院 年级/专业/班 计算机02 姓名 杨华奇 学号 1006100096 实验课程名称 程序设计课程设计 成绩 实验项目名称 简单学生管理系统设计 指导老师 田际平 王建雄 (***报告只能为文字和图片,老师评语将添加到此处,学生请勿作答***) 一、实验目的 通过本课程的教学实践,使学生达到加深对计算机高级语言程序设计特点、结构化程 序设计方法和面向对象程序设计的理解、提高学生对可视化编程的动手能力之目的 二、 实验内容 “简单学生管理系统设计” 1. 系统功能简介:本系统有包括7个主要功能供给用户,用于管理学生信息。输入和储存学生信息 用户可以使用系统储存学生信息,包括学生姓名,学号,性别,成绩(物理,英语,数学,计算机导论,C程序) 2. 查看学生信息 通过使用系统可以查看已统计好的学生信息 3. 学生成绩统计: 使用系统可以浏览学生已排好的成绩统计,包括名次,总分,平均分,最高和最低分。 4. 查找学生信息: 使用系统可以浏览单个学生的信息,分为按学号和姓名查找。 5. 修改学生信息:当学生信息有误时就可以通过系统来修改。 6. 删除学生信息:使用系统可以要删除某个学生信息。 7. 增加学生信息:不能在第一个功能上增加学生信息,只能在这个功能上实现。 8. 退出。 系统主程序 退 出 输入和储存学生信息 查 看 学 生 信 息 学 生 成 绩 统 计 查 找 学 生 信 息 修 改 学 生 信 息 删 除 学 生 信 息 增 加 学 生 信 息 按学生学号查找 按学生姓名查找 三、实验原理 本设计内容可用程序设计基础方法完成,参考程序设计课程设计实验指导书 四、实验设备 软件Visual Studio 2010 五、实验要求 必修 六、 实验程序 #include "StdAfx.h" #include <iostream> #include <fstream> #include <cstring> using namespace std; //全局量 int n=0; int nk=0; char *filename; long num[1000]; int work_l=0; int level = 1; int build = 0; fstream f; //成绩类 struct student { public: //个人信息 char name[20]; char sex[10]; long number; //各科成绩变量 float m_english; float m_math; float m_computer; float m_programming; float m_phisic; float m_total; float m_reverage; float m_highest; float m_lowest; }s; // 1.11 求平均分 void reverage(student &st) { st.m_reverage = st.m_total/5; } //1.12 求总分 void total(student &st) { st.m_total = st.m_math + st.m_english + st.m_computer + st.m_programming + st.m_phisic; reverage(st); } //1.13 显示各科成绩 void s_show(student &st) { cout << "\t英语\t数学\t物理\t导论\t程序\t"<< "总分\t" << "平均分\n";; cout << "\t" << st.m_english << '\t' << st.m_math << '\t' << st.m_phisic << '\t' << st.m_computer << '\t' << st.m_programming <<'\t'; cout << st.m_total << "\t" << st.m_reverage <<endl<<endl<<endl; } //1.2 显示数据函数 void show(student &st) { if(work_l==1&&level<=n) { cout << "名次:" << level << endl; ++level; } cout << "\t姓名\t性别\t学号\n"; cout << "\t"<< st.name << "\t" << st.sex << "\t" << st.number<<endl <<endl; s_show(st); } //1.3 判断成绩十分符合逻辑 float judge(float grade ) { if(!(grade>=0&&grade<=150)) { cout << "成绩不符合要求!请输入0~150之间的数。\n"; cin >> grade; } return grade; } //判断学号是否重复 long judge1(long s_num) { if(nk) { int work01 = 1; int l = 0; for(;l<nk;++l) { if(s_num==num[l]) { cout << "学号重复!重新输入学号:"; cin >> s_num; num[nk] = s_num; s_num = judge1(s_num); work01 = 0; } else work01 = 1; } if(work01==1) { return s_num; } } return s_num; } //1.4 输入 void input(student &st) { int sex; char *ss; //输入各项信息 cout << "姓名:"; cin >> st.name; cout << "学号:"; //输入学号。 cin >> st.number; num[nk] = st.number; st.number = judge1(st.number); cout << "性别(男:1,女:0):"; cin >> sex; if(sex==1) ss = "男"; else if(sex==0) ss = "女"; else ss ="未知"; strcpy_s(st.sex,ss); cout << "英语:"; cin >> st.m_english; st.m_english = judge(st.m_english); cout << "数学:"; cin >> st.m_math; st.m_math = judge(st.m_math); cout << "物理:"; cin >> st.m_phisic; st.m_phisic = judge(st.m_phisic); cout << "导论:"; cin >> st.m_computer; st.m_computer = judge(st.m_computer); cout << "程序:"; cin >> st.m_programming; st.m_programming = judge(st.m_programming); cout << endl << endl; total(st); f.write((char*)&st,sizeof(student)); } //1.5 判断是否已经创建操作员输入的文件名的文件 int judge() { if(!build) { cout << "还未创建文件!请重新选择操作!" << endl; return 0; } else return 1; } //1.5 写入信息 void set() { cout << "人数:"; cin >> n; //打开文件 f.open(filename,ios::out); for(int i = 0;i<n;++i) { nk = i; input(s); } //表明已经创建了文件 build = 1; //关闭文件 f.close(); } //2 浏览 void skim(student &st) { int work0 = 1; work0 = judge(); if(work0==0) { return; } f.open(filename,ios::in); if(!f) { cerr << "打不开文件。\n"; abort(); } //移动流指针到文件头 f.seekg( 0,ios::beg ); for(int i = 0;i<n;++i) { f.read((char*)&st,sizeof(student)); cout << "第" << i+1 <<"个人\n"; show(st); } f.close(); } //3 统计 void manage() { int work0 = 1; work0 = judge(); if(work0 == 0) { return; } f.open(filename,ios::in|ios::out); if(!f) { cerr << "打不开文件。\n"; abort(); } //将真值赋给名次工作机制判断变量 work_l = 1; //移动流指针到文件头 f.seekg( 0,ios::beg ); student *temp = new student[n]; int work; for(int i = 0;i<n;++i) { f.read((char*)&temp[i],sizeof(student)); } //对数组排序 for(int pass = 1;pass < n;++pass) { work = 0; int p =0; for(p;p < n-pass;++p) if(temp[p].m_total<temp[p+1].m_total) { student st; //比较总分,进行相应操作 st = temp[p]; temp[p] = temp[p+1]; temp[p+1] = st; work = 0; } //若没有重新排序则证明已排序好,退出当前操作 if(work) break; } f.seekp(0,ios::beg); for(int p = 0;p<n;++p) f.write((char*)&temp[p],sizeof(student)); f.close(); //浏览统计后的数据信息 skim(s); if(n) { cout << "最高分为:" <<endl<<endl; show(temp[0]); cout << "最低分为:" <<endl<<endl; show(temp[n-1]); } delete (temp); } //4 查找 void find() { //judge(); int work0 = 1; work0 = judge(); if(work0 == 0) { return; } f.open(filename,ios::in); if(!f) { cerr << "打不开文件。\n"; abort(); } //声明本函数需要用到的变量 int work = 0; char name[20]; unsigned long num; int choice; cout << "---按姓名查找:0---" << endl << "---按学号查找: 1---" << endl; cin>>choice; //选择用户及其信息来操作 if(choice==0) { cout << "输入目标学生姓名:"; cin >> name; } else if(choice==1) { cout << "输入目标学生学号:"; cin >> num; } else {cout << "操作错误!\n";f.close();return;} //移动流指针到文件头 f.seekg( 0,ios::beg ); for(int i = 0;i<n;++i) { f.read((char*)&s,sizeof(student)); switch(choice) { case 0: if(!strcmp(name,s.name)) { cout << "信息找到!\n"; show(s); work = 1; break; case 1: if(num==s.number) { cout << "信息找到!\n"; show(s); work = 1; break; } default:;break; } } } if(!work) { cout << "找不到该学生信息!\n"; } f.close(); } //5 修改 void correct() { int work0 = 1; work0 = judge(); if(work0==0) { return; } f.open(filename,ios::in); if(!f) { cerr << "打不开文件。\n"; abort(); } int work = 0; int work_correct = 0; int ch; int i = 0; unsigned long num1; student *temp = new student[n]; //移动流指针到文件头 f.seekg( 0,ios::beg ); for(i;i<n;++i) { f.read((char*)&temp[i],sizeof(student)); } f.close(); cout << "输入目标学生学号:"; cin >> num1; //已删除现有内容的方式打开文本 f.open(filename,ios::trunc|ios::out); if(!f) { cerr << "打不开文件。\n"; abort(); } for(i=0;i<n;++i) { if(temp[i].number == num1) { work_correct = 1; cout << "信息找到!\n"; work = 1; cout<< "*****选择需要修改的数据***** \n" << "***** 1: 姓 名 ***** ***** \n" << "***** 2: 学 号 ***** ***** \n" << "***** 3: 性 别(男:1,女:0) \n" << "***** 4: 英 语 ***** ***** \n" << "***** 5: 数 学 ***** ***** \n" << "***** 6: 物 理 ***** ***** \n" << "***** 7: 导 论 ***** ***** \n" << "***** 8: 程 序 ***** ***** \n" << endl; cin >> ch; int sex; char *s; //重新输入需要修改的数据 switch(ch) { case 1:cin >> temp[i].name;break; case 2: { for(int m = 0;m<n;++m) if(num[m] == temp[i].number) num[m] = -1000; nk = n; cin >> temp[i].number; num[n] = temp[i].number; temp[i].number = judge1(temp[i].number); break; } case 3: { cin >> sex; if(sex) s = "男"; else s = "女"; strcpy_s(temp[i].sex,s); break; } case 4:cin >> temp[i].m_english;break; case 5:cin >> temp[i].m_math;break; case 6:cin >> temp[i].m_phisic;break; case 7:cin >> temp[i].m_computer;break; case 8:cin >> temp[i].m_programming;break; default :cout << "操作错误!\n";break; } total(temp[i]); } f.write((char*)&temp[i],sizeof(student)); } if(!work) { cout << "找不到该学生信息!\n"; } delete(temp); f.close(); } //6 删除 void del() { int work0 = 1; work0 = judge(); if(work0==0) { return; } f.open(filename,ios::in); if(!f) { cerr << "打不开文件。\n"; abort(); } //声明该函数需要的一些变量 int work = 0; unsigned long num1; int i = 0; student *temp = new student[n]; //移动流指针到文件头 f.seekg( 0,ios::beg ); for(i;i<n;++i) { //读出信息给一个结构数组中 f.read((char*)&temp[i],sizeof(student)); } f.close(); cout << "输入目标学生学号:"; cin >> num1; //已删除现有内容的方式打开文本 f.open(filename,ios::trunc|ios::out); if(!f) { cerr << "打不开文件。\n"; abort(); } //重新写入 int nn = n; for(i=0;i<nn;++i) { if(temp[i].number == num1) { char ch2; cout << "要删除的信息找到了,是否要删除?\n"; show(temp[i]); cout << "是:Y,否:N:"; cin >> ch2; if(ch2=='y'||ch2=='Y') { num[i] = -1000; cout << "信息已删除!\n"; --n; nk = n; } else f.write((char*)&temp[i],sizeof(student)); work = 1; } else f.write((char*)&temp[i],sizeof(student)); } if(!work) { cout << "找不到该学生信息!\n"; } //取消名次操作变量的真值状态 work_l = 0; delete(temp); f.close(); } //7 增加 void add() { int work0 = 1; work0 = judge(); if(work0==0) { return; } f.open(filename,ios::app); if(!f) { cerr << "打不开文件。\n"; abort(); } student st; f.seekp(0,ios::end); //调用输入信息函数 nk = n; input(st); ++n; //取消名次操作变量的真值状态 work_l = 0; f.close(); } int _tmain() { cout<< "\t\t\t********************\n" << "\t\t\t* *\n" << "\t\t\t* 学生管理系统 *\n" << "\t\t\t* *\n" << "\t\t\t********************\n" << endl; char choice; filename = "E:\\student.txt"; cout << filename << endl; //输入信息 while(1) { cout<< "\t\t\t*******选择操作*******\n\n" << "\t\t\t*i: 输入&储存学生信息*\n" << "\t\t\t*s: 查 看 学 生 信 息*\n" << "\t\t\t*m: 学 生 成 绩 统 计*\n" << "\t\t\t*f: 查 找 学 生 信 息*\n" << "\t\t\t*c: 修 改 学 生 信 息*\n" << "\t\t\t*d: 删 除 学 生 信 息*\n" << "\t\t\t*a: 增 加 学 生 信 息*\n" << "\t\t\t*q: 退 出*************\n"; cin >> choice; if(choice>=65&&choice<=90) choice +=32; switch(choice) { case 'i':set();break; case 's':skim(s);break; case 'm':manage();break; case 'f':find();break; case 'c':correct();break; case 'd':del();break; case 'a':add();break; case 'q':exit(0);break; default:cout << "操作错误!" << endl;break; } } return 0; } 截图: 写入:void set(); 查看:void skim(); 统计:void manage(); 姓名查找:void find(); 学号查找:void find(); 修改:void correct(); 修改后再查看 删除:void del(); 增加:void add(); 退出: 七、总结心得 1:对IO流的操作中,要时刻注意是否打开的文本在用完后是否关闭了,否则很容易出错。 2:对IO流指针的赋值和流对象的引用要谨慎,否则会导致数据传输的乱码和错误。就比如这个程序中,刚开始时的查找信息函数由于流对象f的传输不仔细,把f引用到输出函数后不知道在哪里出错了,导致了查找并判断信息是否符合要求时,输出的数据并不是要查找的数据。 3. 对输入相同数据的删除处理不好会出现乱码。- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 完整 word 简单 学生 管理 系统 设计 文档 良心 出品
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【a199****6536】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【a199****6536】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【a199****6536】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【a199****6536】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文