《C++程序设计课程设计-学校教师管理系统(26页).doc》由会员分享,可在线阅读,更多相关《C++程序设计课程设计-学校教师管理系统(26页).doc(26页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、-C+程序设计课程设计-学校教师管理系统-第 26 页课程实训报告 课程名称:C+面向对象程序设计班 级: 16级软件3班 学 生: 指导教师: 2017年 06 月目 录1、课程设计目的和要求31.1 设计目的31.2 设计要求31.3 课程设计任务内容42、详细设计说明52.1初始界面53、程序设计流程图54、程序源代码74.1测试数据74.2各模块运行界面85、课程设计中遇到的问题和体会175.1 课程设计中遇到的问题175.2课程设计中的体会176、致谢287、参考文献28摘要通过主菜单main函数将增加教师信息,删除教师信息、显示教师信息、查找教师信息、统计教师人数、退出系统等函数结
2、合在一起,在通过相关操作选择其中一个功能时,调用该功能函数,来完成所需的数据处理。采用类,对象数组,等相关类的应用来完成设计。在程序中主要定义了teacher类,使用了teacher1文件,等等,另外还有相关调用子函数。关键词:学校教师管理系统;类;文件;对象数组;1、课程设计目的和要求1.1 设计目的通过这次专题实习,巩固和加深对所学相关知识点的理解,进一步熟悉基本类的使用方法。基本数据类型、对象数组、自定义类、函数的应用加强对模块化程序设计和面向对象程序设计的理解。掌握CC+语言程序设计的基本思想,了解简单的系统分析和设计方法。1.2 设计要求实现简易的提示菜单界面,刚运行时应显示菜单信息
3、。用所学的知识尽量实现良好的、美观的“人机界面”,便于软件的操作使用。要求把所有录入的数据以文件的形式,保存在硬盘上,系统包含以下基本功能:开始、显示主菜单功能、增加教师信息,删除教师信息、显示教师信息、查找教师信息、统计教师人数、退出系统等。1.3 课程设计任务内容1.3.1 增加教师信息 用户输入要添加的教师信息。教师信息包括姓名,年龄,性别,工号,教学方向等信息。输入数据时,须验证数据的输入格式正确(使用流状态函数检测输入流状态),保证教师编号的唯一性。1.3.2遍历数据功能按照一等排序方式显示所有有关老师的信息数据,方便查看数据。1.3.3 保存数据功能将老师信息使用二进制方式存在文件
4、中,以便可以随时读取数据。1.3.4读取数据功能将在硬盘中的二进制文件读取到内存中,以便可以随时操作数据。1.3.5查找数据功能此功能按照1:姓名和2:工号。方式查找数据信息。若找到则显示数据信息,未找到显示“没有该数据成员”。1.3.6删除数据功能此功能按照1:姓名和2:工号。方式删除数据信息。若找到则删除数据信息,未找到显示“没有该数据成员”。1.3.7 修改数据功能此功能按照1:姓名和2:工号。方式先查找数据信息。若找到则开始修改数据信息,未找到显示“没有该数据成员”。1.3.8 删除所有功能此功能将删除内存中的所有数据。1.3.9 返回人数功能此功能将返回现有数据成员统计人数1.3.a
5、 排序数据功能此功能按照1:姓名和2:工号。1升序 2降序,方式排序数据信息。1.3.q 退出系统功能此功能将退出系统。1.3.p 密码管理功能此功能提供修改密码功能,以便你修改你的登陆密码。1.3.d 删除账户功能此功能将删除你的用户信息,包括你的存盘文件。结束程序运行。2、详细设计说明2.1 类的设计设计一个基类Base_info用于一些基本数据和方法由Base_info派生出Student由Base_info派生出Teacher定义一个Manage管理操作2.2界面设计输入密码之后选择学生还是老师信息录入功能。按界面提示操作按提示可进入相应界面进行,增加(学生)教师信息、删除(学生)教师
6、信息、遍历(学生)教师信息、保存(学生)教师信息、读取(学生)教师人数、查找(学生)教师信息、删除(学生)教师信息、修改(学生)教师信息、删除所有(学生)教师信息、返回(学生)教师人数、排序(学生)教师信息、密码管理功能、删除账户功能。退出系统等项目对教师信息进行一系列的操作,并借用一系列的文件的读写和程序语句构建出最后的大程序来实现对教师信息的管理。3、程序设计流程图1 追加数据2 遍历数据3 保存数据4 读取数据5 查找数据6 删除数据7 修改数据8 删除所有9 返回人数a 排序系统q 退出系统p 密码管理d 删除账户开始修改信息输入信息显示信息 保存信息 读取信息 追加数据 遍历数据 保
7、存数据 读取数据 查找数据 删除数据 修改数据 删除所有 返回人数 排序系统 密码管理 退出系统 删除账户1姓名2工号 查找1姓名2工号 删除1姓名2工号 删除所有返回人数12 姓名排序 工号排序输入密码 修改密码 删除账户 查找 删除退出系统4程序源代码#include /1.2版本 1.修复流状态错误 2.修改选项 采用自动读取不用回车 #include cstdlib/1.3版本 1.增加密码管理 2.出生日期使用结构体存储 #include string#include fstream#include conio.h#include limits #include vector#inc
8、lude io.h#include direct.h#include using namespace std;string password;/全局变量密码; string user;/全局变量用户名 string password_address(D:Windowspeople_system);/全局变量地址; string password_student;/全局变量 存储路径 string password_teacher; /全局变量 存储路径 string address_temp;/全局变量 存储路径temp struct Birthint y;int m;int d;temp_b
9、irth;template void cin_iserror(T &test);/流状态判断 void tips_none()cout当前没有数据!请添加数据或是读取数据endl;void tips_cout(char choice=1)choice=1?coutn姓名t性别t学号t出-生-日-期t老师tCtC#tC+t总分endl:choice=2?coutn姓名t性别t学号t出-生-日-期t教学方向tendl:cout请按任意键继续m_name,name);void setdata();void show();bool find_data_name(char * Find_data_nam
10、e=none);bool find_data_id(long Find_data_id);friend bool compare_with_name_max(const Base_info&test1,const Base_info&test2);/sort算法函数 friend bool compare_with_name_min(const Base_info&test1,const Base_info&test2);/sort算法函数 friend bool compare_with_id_max(const Base_info&test1,const Base_info&test2);
11、/sort算法函数 friend bool compare_with_id_min(const Base_info&test1,const Base_info&test2);/sort算法函数 void Base_info:setdata()cout输入姓名: ;cin.ignore(1000,n);cin.get(m_name,20);coutm_sex;coutm_id;coutm_birth.y; coutm_birth.m; coutm_birth.d; cin_iserror(*this);/判断流状态 void Base_info:show()coutm_nametm_sextm_
12、idtm_birth.y-m_birth.m-m_birth.d;bool Base_info:find_data_name(char * Find_data_name)if(!strcmp(m_name,Find_data_name)return 1;elsereturn 0;bool Base_info:find_data_id(long Find_data_id)if(Find_data_id=m_id)return 1;elsereturn 0;bool compare_with_name_max(const Base_info&test1,const Base_info&test2)
13、return strcmp(test1.m_name,test2.m_name)0?1:0;bool compare_with_id_max(const Base_info&test1,const Base_info&test2)return test1.m_idtest2.m_id;class Student:public Base_info private :char m_teacher20;double m_score3;public :Student(Birth birth,char name20=none,char sex=a,long id=0,char Teacher20=non
14、e):Base_info(birth,name,sex,id)strcpy(this-m_teacher,Teacher);void setdata();void show();bool operatorm_score0+this-m_score1+this-m_score2)(test.m_score0+test.m_score1+test.m_score2);void Student:setdata()Base_info:setdata();cout输入导师姓名:;cin.ignore(1000,n);cin.get(m_teacher,20);int i;for(i=0;i3;i+)co
15、ut输入第i+1m_scorei;cin_iserror(*this);void Student:show()Base_info:show();couttm_teachert;int i;double sum=0;for(i=0;i3;i+)coutm_scoreit;sum+=m_scorei;coutsumm_teacherching,Teacherching);void show();void setdata(); bool operator(const Teacher&test)const return 1;/兼容模版 void Teacher:show()Base_info:show
16、();coutt m_teacherchingendl;void Teacher:setdata()Base_info:setdata();/应该设置一个流状态监测 如果流错误 就应该重新设置 cout输入教学方向:;cin.ignore(1000,n);cin.get(m_teacherching,20);templateclass Managepublic :void set_data(vector &test); void add_data(vector &test);void find_data(vector &test);int position(vector &test);void
17、 delete_data(vector &test);void display(vector &test);void save_file(vector &test);/保存文件信息 void open_file(vector &test);/读取文件信息 void sort_data(vector &test);/排序信息 void show_select(int i=1);static void manage_password();static void set_address();static void start_password();static void delete_user();
18、void options(vector &test);/i=1表示学生 templatevoid Manage:set_data(vector &test)if(test.size()=0)tips_none();elseint n=position(test);test.at(n).setdata();templatevoid Manage:add_data(vector &test)T temp(temp_birth);temp.setdata();test.push_back(temp);templatevoid Manage:find_data(vector &test)if(test
19、.size()=0)tips_none();elseint n=position(test);if(n=-1&ntest.size()cout未找到数据endl;elsetips_cout();test.at(n).show();templateint Manage:position(vector &test)int count=test.size();/统计人数;char select_name20;char select_id;char select_if;int i;cout1姓名t2学号endl;select_if=getch();if(select_if=1)coutselect_n
20、ame;for(i=0;icount;i+)if(test.at(i).find_data_name(select_name)return i;return -1;elsecoutselect_id;for(i=0;icount;i+)if(test.at(i).find_data_id(select_id)return i;return -1;templatevoid Manage:delete_data(vector &test)if(test.size()=0)tips_none();elseint n=position(test);test.erase(test.begin()+n);
21、cout删除完毕endl;templatevoid Manage:display(vector &test)if(test.size()=0)tips_none();elseint count=test.size();int i;sizeof(T)=sizeof(Student)?tips_cout(1):tips_cout(2);for(i=0;icount;i+)test.at(i).show();templatevoid Manage:save_file(vector &test)/保存文件信息 int i=0;ofstream file_Student;ofstream file_Te
22、acher;if(test.size()!=0)int count=test.size();/人数统计 if(sizeof(T)=sizeof(Student)/学生 统计学生人数 file_Student.open(password_student.c_str(),ios_base:out|ios_base:trunc|ios:binary);if(!file_Student.is_open()cout文件打开失败endl;exit(0);file_Student.write(char *)&count,sizeof(count);/统计学生总人数 while(i+count)file_St
23、udent.write(char *)&test.at(i-1),sizeof(T);cout文件加载完毕endl;file_Student.close();elsefile_Teacher.open(password_teacher.c_str(),ios_base:out|ios_base:trunc|ios:binary);if(!file_Teacher.is_open()cout文件打开失败endl;exit(0);file_Teacher.write(char *)&count,sizeof(count);/统计老师总人数 while(i+count)file_Teacher.wr
24、ite(char *)&test.at(i-1),sizeof(T);cout文件加载完毕endl;file_Teacher.close();elsetips_none();cout无效的保存endl; templatevoid Manage:open_file(vector &test)/读取文件信息 int count;int i=0;ifstream file_Student;ifstream file_Teacher;if(sizeof(T)=sizeof(Student)/判断学生 T data(temp_birth);/必须用T 而不能用Student file_Student.o
25、pen(password_student.c_str(),ios_base:in|ios_base:binary);if(!file_Student.is_open()cout学生数据文件打开失败endl;exit(0);file_Student.read(char *)&count,sizeof(count);/读取学生人数 while(i+count)file_Student.read(char*)&data,sizeof(T);test.push_back(data);cout文件读取成功endl;file_Student.close();/关闭文件 elseT data(temp_bi
26、rth);file_Teacher.open(password_teacher.c_str(),ios_base:in|ios_base:binary);if(!file_Teacher.is_open()cout老师数据文件打开失败endl;exit(0);file_Teacher.read(char *)&count,sizeof(count);/读取老师人数 while(i+count)file_Teacher.read(char*)&data,sizeof(T);test.push_back(data);cout文件读取成功endl;file_Teacher.close();/关闭文件
27、 templatevoid Manage:sort_data(vector &test)/排序信息 int select_i_sort=0;if(test.size()!=0)int i=0;int j;char select_height;char select_sort;sizeof(T)=sizeof(Student)?coutn1姓名排序n2学号排序n3总分排序n:coutn1姓名排序n2学号排序n;/判断提示类型 select_sort=getch();cout1升序n2降序运算符 所以 sort只能判断一种 另一种就需要反转容器的元素 elsesort(test.begin(),t
28、est.end();/排序 reverse(test.begin(),test.end();/反转 reverse是std:方法 system(cls);cout排序完成 请重新遍历endl;elsetips_none();templatevoid Manage:show_select(int i)cout1 追加数据endl;cout2 遍历数据endl;cout3 保存数据endl;cout4 读取数据endl;cout5 查找数据endl;cout6 删除数据endl;cout7 修改数据endl;cout8 删除所有endl;cout9 返回人数endl;couta 排序系统endl;
29、coutq 退出系统endl;coutp 密码管理endl;coutd 删除账户endl;coutn;templatevoid Manage:manage_password()char select_password;string compare_password;ofstream out_password_file;system(cls);cout1修改密码endl;select_password=getch();coutcompare_password;if(compare_password=password)coutcompare_password;out_password_file.o
30、pen(password_address.c_str(),ios_base:out|ios_base:binary|ios_base:trunc);out_password_fileusern;out_password_filecompare_password.c_str();password=compare_password;cout密码修改成功endl;getch();system(cls);elsecout密码核对失败endl;getch();system(cls);templatevoid Manage:set_address()password_student.assign(addr
31、ess_temp.begin()+3,address_temp.end();address_temp=password_student;password_teacher=address_temp;password_student+=string(count_studentbin);password_teacher+=string(count_Teacherbin);templatevoid Manage:start_password()ofstream out_password_file;ifstream in_password_file;string compare_password;str
32、ing compare_user;char select_password;string md;int is_empty=access(D:Windowspeople_system,00); /判断文件夹是否存在 0存在 -1不存在 if(is_empty!=0)/没有文件夹 system(md D:Windowspeople_system);system(cls); coutuser;coutpassword;address_temp=string(md );address_temp+=password_address+user;password_address+=user+string(p
33、eople_system.bin);if(access(password_address.c_str(),00)cout你输入的账户是一个未注册的账户 是否根据你刚才输入的信息进行注册?endl;select_password=getch();system(cls); if(select_password=1)system(address_temp.c_str();/创建文件夹 out_password_file.open(password_address.c_str(),ios_base:out|ios_base:binary);out_password_fileusern;out_pass
34、word_filepassword;out_password_file.close();elseexit(0);elsein_password_file.open(password_address.c_str(),ios_base:in|ios_base:binary);getline(in_password_file,compare_user);getline(in_password_file,compare_password);if(compare_password=password&compare_user=user)cout密码正确endl;tips_cout(3);elsecout密
35、码错误endl;exit(0);getch();system(cls);set_address();templatevoid Manage:delete_user()string delect_address; cout当前操作将删除当前账户的所有记载信息endl;tips_cout(3);char select_delect;select_delect=getch();delect_address=rmdir /s/q D:Windowspeople_system+user;if(select_delect=1)system(delect_address.c_str();cout删除完毕endl;getch();system(cls); templatevoid Manage:options(vector &test)/i=1表示学生 char select_while=a;char select_case=a;while(select_while!=q)show_select();select_case=getch();switch(select_case)case 1:cout1 追加数据功能nendl;add_data(te