C++课程设计报告职工信息管理系统.doc
目录一、 课程设计目的及要求.2二、 课程设计具体实现.2(一) 总体设计.21) 职工信息管理系统.32) 学生通讯系统.12(二) 详细设计.31) 职工信息管理系统.32) 学生通讯系统13三、 心得体会.23四、 源代码.24(一) 职工信息管理系统. 24(二) 学生通讯系统.37课程设计报告一、 课程设计目的及要求1. 设计目的l 提高和加强学生的计算机应用与软件开发能力,使学生由初学者向专业的程序员过渡。l 培养学生独立分析问题、解决问题、查阅资料以及自学能力,以适应计算机产业日新月异发展的形势。l 学习和掌握C+程序设计方法以及上机调试技巧,为今后学习其它专业课程打好基础2. 设计要求(一) 职工信息管理系统 职工信息包括职工号、姓名、性别、年龄、学历、工资、住址、电话等(职工号不重复)。试设计一职工信息管理系统,系统以菜单方式工作,使之能提供以下功能:l 职工信息录入功能(职工信息用文件保存)l 职工信息浏览功能 l 查询和排序功能:按工资查询和按学历查询或按年龄等查询l 职工信息删除、修改功能l 统计功能(二) 学生通讯系统学生通信录信息包括:姓名、学号、年龄、性别、家庭住址、联系电话、寝室号等信息。现要求编写程序来完成如下功能:l 学生通信录信息的输入l 学生的通信录信息删除和修改l 学生的通信录信息查询和统计功能l 学生的通信录信息输出显示 二、 课程设计具体实现(一) 职工信息管理系统(1)总体设计 根据任务要求,程序主要包含五大功能模块:1.职工信息录入功能 2.职工信息浏览功能 3.职工信息查询和排序 4.职工信息删除和修改功能 5.职工信息统计功能。总体设计图如下:职工信息管理系统信息录入信息删除和修改信息统计信息查询和排序信息浏览信息删除信息修改按工资高低降序排列查 询按年龄大小降序排 列查 询按学历高低降序排列查 询(2)详细设计 该项目文件名为职工信息管理系统,共有8个.cpp和2个.h文件u 主菜单(在main .cpp中) 主要完成功能为:当用户开始使用本系统,进入登陆模块。屏幕显示菜单提示,用户可根据需要选择15进入相应功能。具体如下:1.职工信息录入 2.职工信息浏览 登录模块的截图如下所示:主要使用技术:switch语句以进入各个功能以及退出主要代码:switch(scan3()case 1: /职工信息录入input();getchar(); break;case 2: /职工信息浏览display();getchar(); break;case 3: /查询和排序find();getchar(); break;case 4: /职工信息删除、修改change();getchar(); break;case 5: /职工信息统计count();getchar(); break;default:cout<<"谢谢使用,再见!"<<endl;quit=1;break;输入15数字可进入执行不同功能的函数,并在执行结束后返回主页面流程图:开始Cin>>nSwitch(n)Case 1:······Case5:default:input()·······count()退出功能完成u 职工信息录入功能(在input .cpp中) 主要功能:完成职工信息的录入,用if语句还有文本文档对职工信息进行录入;在此定义N最多为二十个;建立职工信息结构体,保存在.h文件中!将职工信息保存于文本文件: 职工基本信息.txt中。同时将输入职工的人数保存到文本文件: 职工人数 .txt中。利用for循环进行输入。主要还是文件的输入问题!主要代码:for(int i=0;i<t;i+) /输入职工基本信息cout<<"n请输入第"<<i+1<<"个职工的信息"<<endl;cout<<"职工号:"loop: cin>>peri.number; /判断职工号是否存在 if (peri.number=peri-1.number) cout<<"该职工号已存在,请重新输入!"<<endl; goto loop; outf<<peri.number<<" " cout<<"n姓名:" cin>>peri.name; outf<<peri.name<<" " cout<<"n性别(男M/m 女W/w)(请输入字母):" cin>>peri.sex; outf<<peri.sex<<" " cout<<"n年龄:" cin>>peri.age; outf<<peri.age<<" " cout<<"n学历(1专科 2本科 3硕士 4博士)(请输入数字):" cin>>peri.rank; outf<<peri.rank<<" " cout<<"n工资:" cin>>peri.salary; outf<<peri.salary<<" " cout<<"n住址:" cin>>peri.add; outf<<peri.add<<" " cout<<"n电话:" cin>>peri.phone; outf<<peri.phone<<" "截图如下:u 职工信息浏览功能(在display .cpp中) 主要功能:从文件 职工基本信息.txt 中读出所有职工的信息,显示到屏幕上。关键代码: open(); /从文件中读取信息 for(int i=0;i<N;i+) /输出职工信息 if(peri.number=0) break; cout<<"职工号:"<<peri.number<<endl; cout<<"姓名:"<<peri.name<<endl; cout<<"性别:" xsex(peri.sex); cout<<endl; cout<<"年龄:"<<peri.age<<endl; cout<<"学历:"xrank(peri.rank);cout<<endl; cout<<"工资:"<<peri.salary<<endl; cout<<"住址:"<<peri.add<<endl; cout<<"电话:"<<peri.phone<<endl<<endl; 截图如下:u 职工信息查询和排序(在find .cpp中) 主要功能:对信息的查询按照三种查询方法:1.按工资高低降序排列查询 2. 按学历高低降序排列查询 3. 按年龄大小降序排列查询主要使用技术:使用 冒泡法对数据进行排序主要代码:case 1:cout<<"按工资从高到低排:"<<endl; open(); person t; int i,j; for(i=0;i<N;i+) /按工资高低降序排列 for(j=i+1;j<N;j+) if(peri.salary<perj.salary) t=peri; peri=perj; perj=t;case 2: cout<<"按学历从高到低排:"<<endl;open(); person t; int i,j; for(i=0;i<N;i+) /按学历高低降序排列 for(j=i+1;j<N;j+) if(peri.rank<perj.rank) t=peri; peri=perj; perj=t;case 3: cout<<"按年龄从大到小排:"<<endl; open(); person t; int i,j; for(i=0;i<N;i+) /按年龄大小降序排列 for(j=i+1;j<N;j+) if(peri.age<perj.age) t=peri; peri=perj; perj=t;截图如下:u 职工信息修改和删除功能(在change .cpp中) 主要功能:先从文件 职工基本信息.txt 中读出所有职工的信息,再对职工信息进行修改和删除,最后将修改后的信息重新读入到 职工基本信息.txt 中,修改后的职工人数保存到 职工人数.txt 中。截图如下:u 职工信息统计功能(在count .cpp中)主要功能:从文件 职工基本信息.txt 中读出所有职工的信息,统计所有职工中专科、本科、硕士、博士学历的人数分别是多少 和所有职工的工资情况:工资2000以下的总人数、2000-3000的总人数、工资3000-4000的总人数、工资4000以上的总人数、及所有职工的平均工资。 主要代码:for(int i=0;i<N;i+)if(peri.rank=1)k1+;else if(peri.rank=2)k2+;else if(peri.rank=3)k3+;else if(peri.rank=4)k4+;cout<<"专科学历的总人数:"<<k1<<endl;cout<<"本科学历的总人数:"<<k2<<endl;cout<<"硕士学历的总人数:"<<k3<<endl;cout<<"博士学历的总人数:"<<k4<<endl<<endl;for(int j=0;j<N;j+) sum+=perj.salary;if(perj.salary<2000 && perj.salary!=0)t1+;else if(perj.salary>=2000 && perj.salary<3000)t2+;else if(perj.salary>=3000 && perj.salary<4000)t3+;else if(perj.salary>=4000)t4+;s=renshu(); /得到职工总人数 ave=(sum/s); /计算职工的平均工资 截图如下:u 退出系统(二) 学生通讯系统(1)总体设计u 根据任务要求,该程序包含五大功能模块:1. 学生通信录信息的输入功能 2. 学生的通信录信息删除功能 3. 学生的通信录信息修改功能 4. 学生的通信录信息查询 5. 学生的通信录信息输出显示功能 总体结构图如下:学生通讯系统通信录信息的输入通信录信息删除通信录信息修改通信录信息查询通信录信息的显示按姓名查找修改按学号查找修改按姓名删除按学号删除按姓名查询按学号查询(2)详细设计u 主菜单(在main .cpp中)主要功能:当用户开始使用本系统,进入登陆模块。屏幕显示菜单提示,用户可根据需要选择15进入相应功能。具体如下:1.信息录入 2.信息浏览 登录模块的截图如下:u 主要代码 int scan() /生成主菜单int n;system("cls");cout<<" 欢迎使用学生通讯系统!"<<endl; cout<<""<<endl;cout<<" 1.信息录入 "<<endl;cout<<" 2.信息浏览 "<<endl;cout<<" 3.信息删除 "<<endl;cout<<" 4.信息修改 "<<endl;cout<<" 5.信息查询 "<<endl;cout<<" 0.退出. "<<endl;cout<<""<<endl;for(;)cin>>n;if(n<0|n>5)cout<<"输入错误,请重新选择!"<<endl;elsebreak;return n;switch (scan() /功能选择case 1: /信息录入Handle h1;h1.write();getchar();break;case 2: /信息浏览int n;Handle h2;n=h2.renshu();CStudent *p;p=h2.read();for(int i=0;i<n;i+)(p+i)->display();cout<<endl;deletep;getchar();break;case 3: /信息删除Handle h3; h3.deletes();getchar();break;case 4: /信息修改Handle h4; h4.change();getchar();break;case 5: /信息查询Handle h5;h5.find();getchar();case 0:quit=1;cout<<"谢谢使用,再见!"<<endl;输入15选择相应的功能进行操作u 学生通讯录信息的输入主要功能:完成学生通信录信息(姓名、学号、年龄、性别、家庭住址、联系电话、寝室号)的录入,将学生通信录信息保存于文本文件: 学生通信录信息.txt中。同时将输入职工的人数保存到文本文件: 学生人数 .txt中 主要代码: int n,sum;CStudent *p;cout<<"请输入您要输入的学生的个数:"<<endl;cin>>n;p=new CStudentn;for(int i=0;i<n;i+)(p+i)->input();void CStudent:input() /输入学生通讯信息cout<<"n输入学生的名字:" cin>>name; cout<<"输入学生的学号:" cin>>number; cout<<"输入学生的年龄:" cin>>age; cout<<"输入学生的性别:" cin>>sex; cout<<"输入学生的家庭住址:" cin>>add;cout<<"输入学生的联系电话:" cin>>phone;cout<<"输入学生的寝室号:" cin>>id;截图如下:u 学生通讯录信息的删除 主要功能:先从文件中读出学生信息,对学生通讯录讯息进行删除,再将修改后的学生信息保存到文件中,并将修改后人数也保存。 主要代码: if(d=1) cout<<"请输入你要删除学生的姓名:"<<endl; cin>>name2;for(int i=0;i<n;i+)if(strcmp(p+i)->name,name2)!=0) outf<<(p+i)->name<<' '<<(p+i)->number<<' '<<(p+i)->age<<' '<<(p+i)->sex<<' '<<(p+i)->add<<' '<<(p+i)->phone<<' '<<(p+i)->id<<' ' cout<<"删除完毕!"<<endl;if(d=2)cout<<"请输入你要删除学生的学号:"<<endl;cin>>number2;for(int i=0;i<n;i+) if(strcmp(p+i)->number,number2)!=0)outf<<(p+i)->name<<' '<<(p+i)->number<<' '<<(p+i)->age<<' '<<(p+i)->sex<<' '<<(p+i)->add<<' '<<(p+i)->phone<<' '<<(p+i)->id<<' ' cout<<"删除完毕!"<截图如下:u 学生通讯录信息修改 主要功能:先从文件中读出学生信息,对学生通讯录讯息进行删除,再将修改后的学生信息保存到文件中。主要代码;cout<<"请选择信息修改方式:"<<endl;cout<<"1.按姓名查找修改 2.按学号查找修改"<<endl;for(;) cin>>d; if(d<1|d>2) cout<<"输入错误,请重新选择!"<<endl; else break;if(d=1) cout<<"n请输入你要修改学生的姓名:"<<endl; cin>>name2; for(int i=0;i<n;i+) if(strcmp(p+i)->name,name2)=0)(p+i)->change1();if(d=2) cout<<"n请输入你要修改学生的学号:"<<endl; cin>>number2; for(int i=0;i<n;i+) if(strcmp(p+i)->number,number2)=0)(p+i)->change1();if(n=1)char name120;cout<<"请输入修改后的姓名:"<<endl;cin>>name1;strcpy(name,name1);cout<<"修改完毕!"<<endl;getchar();if(n=2)char num20;cout<<"请输入修改后的学号:"<<endl;cin>>num; strcpy(number,num);cout<<"修改完毕!"<<endl;getchar();if(n=3)int age1;cout<<"请输入修改后的年龄:"<<endl;cin>>age1;age=age1;cout<<"修改完毕!"<<endl;getchar();if(n=4)char sex12;cout<<"请输入修改后的性别:"<<endl;cin>>sex1;strcpy(sex,sex1);cout<<"修改完毕!"<<endl;getchar();.截图如下:u 学生通讯录信息的查询 主要功能:查询所要了解学生的通讯基本信息主要代码:cout<<"请选择信息查询方式:"<<endl; cout<<"1.按姓名查询 2.按学号查询"<<endl;for(;) cin>>d; if(d<1|d>2) cout<<"输入错误,请重新选择!"<<endl; else break;if(d=1)cout<<"n请输入你要查询学生的姓名:"<<endl; cin>>name3; for(int i=0;i<n;i+) if(strcmp(p+i)->name,name3)=0)(p+i)->display();if(d=2) cout<<"请输入你要查询学生的学号:"<<endl; cin>>number3; for(int i=0;i<n;i+) if(strcmp(p+i)->number,number3)=0)(p+i)->display();截图如下:u 学生通讯录信息的浏览 主要代码:void CStudent:display() /显示学生通讯信息cout<<"学生的名字:"<<name<<endl; cout<<"学生的学号:"<<number<<endl; cout<<"学生的年龄:"<<age<<endl; cout<<"学生的性别:"<<sex<<endl; cout<<"学生的家庭住址:"<<add<<endl; cout<<"学生的联系电话:"<<phone<<endl; cout<<"学生的寝室号:"<<id<<endl;截图如下:u 退出系统三、 心得体会回顾起此次课程设计,至今我仍感慨颇多,的确,自从拿到题目到完成整个编程,从理论到实践,在整整三个星期的日子里,可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,这毕竟独立做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体通过这次课程设计之后,一定要把以前所学过的知识重新温故。总之,编程尤其是调试是一项细致深入的工作,需要下工夫、动脑子、善于积累经验,这往往能反映出一个人的水平、经验和态度这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在老师的指导和同学的帮助下,终于游逆而解我!同时,对他们表示忠心的感谢!四、 源代码(一) 职工信息管理系统/Struct .h/ /职工基本信息struct personlong number; /职工号char name12; /姓名char sex; /性别int age; /年龄int rank; /学历float salary; /工资char add50; /住址long phone; /电话;const int N=20;/head.h/ /函数的声明#include<iostream.h>#include<string.h>#include<fstream.h>#include<stdlib.h>#include<stdio.h>void find();void input();void display();void change();void count();void open();int renshu();void xsex(char);void xrank(int);/main .cpp/#include"head.h"int scan3() int n;system("cls");cout<<" 欢迎使用职工信息管理系统"<<endl;cout<<""<<endl<<endl;cout<<"请选择所要进行的操作:n"cout<<"1.职工信息录入 2.职工信息浏览 3.查询和排序n" cout<<"4.职工信息删除、修改 5.统计n"cout<<"其他键退出.n"cin>>n;return(n);void main()int quit=0;while(!quit)switch(scan3()case 1: input(); /职工信息录入getchar(); break;case 2: display(); /职工信息浏览getchar(); break;case 3: /查询和排序find();getchar(); break;case 4: /职工信息删除、修改change();getchar(); break;case 5: /职工信息统计count();getchar(); break;default:cout<<"谢谢使用,再见!"<<endl;quit=1;break;/input.cpp/#include"head.h"#include"struct.h"void input() system("cls"); person perN;int t;cout<<" 欢迎使用职工信息录入功能"<<endl;cout<<""<<endl;cout<<"本次操作您要添加职工信息的个数:" cin>>t;ofstream outf1("人数.txt",ios:out);if(!outf1)cout<<"不能打开此文件!"<<endl;outf1<<t;outf1.close(); cout<<"n请输入"<<t<<"个职工的职工号、姓名、性别、年龄、学历、工资、住址、电话:n"ofstream outf("职工基本信息.txt",ios:out);/建立打开文件if(!outf)cout<<"不能打开此文件!"<<endl;for(int i=0;i<t;i+) /输入职工基本信息cout<<"n请输入第"<<i+1<<"个职工的信息"<<endl;cout<<"职工号:"loop: cin>>peri.number; if (peri.number=peri-1.number) cout<<"该职工号已存在,请重新输入!"<<endl; goto loop; outf<<peri.number<<" " cout<<"n姓名:" cin>>peri.name; outf<<peri.name<<" " cout<<"n性别(男M/m 女W/w)(请输入字母):" cin>>peri.sex; outf<<peri.sex<<" " cout<<"n年龄:" cin>>peri.age; outf<<peri.age<<" " cout<<"n学历(1专科 2本科 3硕士 4博士)(请输入数字):" cin>>peri.rank; outf<<peri.rank<<" " cout<<"n工资:" cin>>peri.salary; outf<<peri.salary<<" " cout<<"n住址:" cin>>peri.add; outf<<peri.add<<" " cout<<"n电话:" cin>>peri.phone; outf<<peri.phone<<" "outf.close();/