c“加”“加”动态数组加无限内存人员管理系统

上传人:陈** 文档编号:101876236 上传时间:2022-06-05 格式:DOCX 页数:63 大小:274.71KB
收藏 版权申诉 举报 下载
c“加”“加”动态数组加无限内存人员管理系统_第1页
第1页 / 共63页
c“加”“加”动态数组加无限内存人员管理系统_第2页
第2页 / 共63页
c“加”“加”动态数组加无限内存人员管理系统_第3页
第3页 / 共63页
资源描述:

《c“加”“加”动态数组加无限内存人员管理系统》由会员分享,可在线阅读,更多相关《c“加”“加”动态数组加无限内存人员管理系统(63页珍藏版)》请在装配图网上搜索。

1、编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第62页 共63页“信息与计算科学”专业C+语言程序设计课程设计 班级 计算科学 姓名 学号 指导教师 设计日期 2016春19周20周 (一)、设计菜单选择程序。菜单是应用程序的界面,通过控制语句改变程序执行的顺序,设计菜单是程序设计的基础。本设计分两步:第一步:设计一个菜单程序。1 菜单内容:程序运行后,给出3个菜单项的内容和输入提示,如下:1) 利用克莱姆法则求解线性方程组2) 统计一篇英文文章的单词数3) 退出程序第二步:为上述菜单项配上相应的功能。 开始 选择运算 求 解 线 性 方 程 组 求 解 单 词 的 个 数

2、 退 出 结束1.流程图:2.程序优缺点:优点: 采用了 动态开辟二维数组,传递不知道大小的二维数组,程序规范,可读性强。缺点:采用递归算法,增加了程序的时间复杂度。3.代码段:#include#include#include #includeusing namespace std;double *open_up(int row,int line);double Price(int row,int line,double *a); void Head();void Cramer();void Statis_Words();int main()char ch; / 选择变量 while(1) H

3、ead();couttt选择要进行的程序:endl; ch = cin.get(); coutendl; switch(ch) case 1:system(cls);Cramer();break; case 2:system(cls);Statis_Words();break; case 3:system(cls); cout 退出程序 endl; exit(0);break; default :system(cls);couttt 输入有误 endl; cin.get();return 0;void Head()couttt 菜单选择程序 endl;couttt endl;couttt en

4、dl;couttt 1.克莱姆法则解线性方程组 endl;couttt 2.统计英语文章单词数 endl;couttt 3. 结 束 endl;couttt endl;couttt endl; void Cramer() int m = 0,n = 0,i = 0,k = 0,j = 0,h = 0;double Quit = 0.0,l = 0.0;double *a = open_up(15,15); /动态开辟二维数组double *e = open_up(15,15); /动态开辟二维数组double *T = open_up(15,15); /动态开辟二维数组double *W =

5、open_up(15,15); /动态开辟二维数组double P15 = 0.0,d15 = 0.0; cout tt克莱姆法则计算矩阵的值 endl;cout 输入所求线性方程组的系数矩阵;cout 输入行数m和列数n m n;cout输入矩阵endl;for(i = 0;i m;i+) for(j = 0;j aij; coutendl;Quit = Price(n,n,(double *)a);cout 系数矩阵的值为:Quitendl;cout输入方程组的解矩阵endl;for(i = 0;i di;for(i = 0;i m;i+) for(j = 0;j n;j+) eij =

6、aij; for(j = 0;j n;j+)for(i = 0;i m;i+) aij = di;for(i = 0;i m;i+)Pj = Price(n,n,(double*)a)/Quit; /强制类型转换cout x j = Pj endl;for(h = 0;h m;h+) /重置矩阵 ahj = ehj; void Statis_Words() char ch = 0; int count = 0,word = 0; cout输入一片英语文章 以零结尾n = 0 & ch = 91 & ch 122 & ch 127) /判断是否为 word = 0; else if(0 = wo

7、rd) word = 1; count+; cout文章一共有count个单词endl;double Price(int row,int line,double *a)/求矩阵行列式的递归函数 int i = 0,j = 0,c = 0,p = 0,q = 0; double sum = 0; double *ele = open_up(row,line); /动态开辟二维数组 if(row = 1) return *a; for(i = 0;i row;i+) /递归法求解行列式的值 for(c = 0;c row;c+) if(c i) p=0; else p=1; for(j = 0;j

8、 row - 1;j+) elecj = *( a+row*(c+p) + (j+1) ); if(i % 2 = 0) q = 1; else q = -1; sum += *(a+i*row+0) * q * Price(row-1,row-1,(double *)ele); return sum;double *open_up(int row,int line) / 动态开辟二维数组 double *ele = new double *row;for (int i = 0; i row; i+)elei = new doubleline;return ele; 4.程序运行截图:(二)、

9、有理数的四则运算。 有理数就是两个整数的比率,通常表示为,分母不能为0。 本设计要求设计一个Rational(有理数)类,实现有理数的四则运算,该类型的对象使用起来要像使用基本类型的对象一样自然。具体要求如下:1 抽象Ration类,包含两个数据成员(分子、分母),比如有理数可以用对象表示为。2 如果分子分母有公约数,应该约分,例如应表示为。根据需要,有时要将表示为,或者将表示为重载相应的运算符(输入、输出、加、减、乘、除)。比如,要计算,希望像普通加法一样操作,和相加得,算数表达式为。又如,想使用如下形式直接输入分子分母 cin r; /输出则需要重载这两个流运算符。1.流程图: 小数转换转

10、换 结束执行减法执行加法执行乘法 开始创建分数对象执行除法 开始 开始 开始创建分数对象创建分数对象创建分数对象执行除法执行除法执行除法执行乘法执行乘法执行加法执行加法执行减法2.程序优缺点:优点: 采用了友元函数实现运算符重载,使用windows命名规则程序规范,可读性强,使用外部接口让程序更安全。缺点: 部分函数为类的友元函数,破坏了类的完整性。3.代码段:#include#includeusing namespace std; int gcd(int a, int b) ;class Rationpublic:Ration(int a = 0,int b = 0):numer(a),de

11、nom(b) void decide ();void trans (); void input (); friend Ration operator -(Ration c1,Ration c2);friendRation operator +(Ration c1,Ration c2);friend Ration operator *(Ration c1,Ration c2);friend Ration operator /(Ration c1,Ration c2);friend int gcd(int a, int b);friend istream & operator (istream &

12、in,Ration &c );friend ostream & operator (ostream &out,Ration &c );private:int numer;int denom;void Ration : trans () /转变为小数 decide(); double c = (double)numer/(double)denom; cout 小数形式为 c endl;void Ration : decide() / 判别是否可以写成分数 if(0 = denom) cout (istream &in,Ration &c )/c.decide();coutc.numer;cin.

13、get();in c.denom; return in;ostream & operator (ostream &out,Ration &c )/c.decide();if(c.numer != 0) int GCD = gcd(c.numer,c.denom) ; if(GCD = 1) outc.numer/c.denom endl; else outc.numer/GCD/c.denom/GCDendl; else out0n; return out; int gcd(int a, int b) / 求最小公倍数 int n = b; int c = a % b; while(c!=0)

14、 a = b; b = c; c = a % b; return b; int main() Ration A; Ration B; Ration c; cout 请输入分数A A; cout 请输入分数B B; cout B = B; cout A = A; c = B / A; cout c = B / A = cendl; c = B * A; cout c = B * A = cendl; c = B + A; cout c = B + A = cendl; c = B - A; cout c = B - A = cendl; c.trans();return 0;4.程序截图:(三)

15、、职工信息表设计。 使用继承的方法,编写最多能输入10个职工的信息表,再根据这个表产生一个职工信息简表,并利用多态性实现信息的输出。设计要求实现如下功能:1 建立职工信息数据,包括职工编号、姓名,性别和年龄。2 根据职工信息表,建立只含姓名和年龄的职工信息简表。3 使用继承的方法构造2个类,使用相应的对象数组放置10个职工信息。4 编写同名display( )成员函数,用来输出数组的内容。5 编写函数printer( ),用来根据实际对象输出它们的内容。1.流程图: 开始开始类对象初始化打印类对象数组1打印类对象数组2调用printer函数选择查询职员结束2.程序优缺点:优点:使用window

16、s命名规则程序规范,可读性强,代码精炼,时间复杂度低,空间复杂度低缺点: 功能较弱,操作性低。3.代码段:#include #include#includeusing namespace std; class Employee_one public: Employee_one(int n,char *nam,char s,int a):num(n),name(nam),sex(s),age(a) virtual void display(); int getnum() return num; char* getname() return name; char getsex() return s

17、ex; int getage() return age; private: int num; char *name; char sex; int age; ; class Employee_two:public Employee_one public: Employee_two(int n,char* nam,char s,int a,int w):Employee_one(n,nam,s,a),wages(w) void display(); int getwages() return wages; private: int wages; ; void Employee_one:displa

18、y() coutsetw(15)nname:name setw(15)setiosflags(ios:right) age:age setw(15)setiosflags(ios:left)sex:sexsetw(15) setiosflags(ios:left)num:num; void Employee_two : display() coutname:getname()setw(15)age:getage()endl; /*nwages:wages*/; void printer(Employee_two w2) int a = 0,i = 0; couta; if(a = 10) fo

19、r (i = 0;i 10;i+) if (w2i.getnum()=a) coutname:w2i.getname()nage:w2i.getage()nwages: w2i.getwages()nsex:w2i.getsex()nnum:w2i.getnum(); else cout编号错误差无此人; int main() Employee_one w110 = Employee_one(1,ci,m,18),Employee_one(2,cai,m,19), Employee_one(3,xi,f,18),Employee_one(4,su,m,20), Employee_one(5,l

20、i,m,20),Employee_one(6,yan,m,19), Employee_one(7,yi,m,18),Employee_one(8,xiu,m,21), Employee_one(9,su,m,17), Employee_one(10,men,m,22); Employee_two w210= Employee_two(1,ci,m,18,800),Employee_two(2,cai,m,19,700), Employee_two(3,xi,f,18,900),Employee_two(4,su,m,20,750), Employee_two(5,li,m,20,860),Em

21、ployee_two(6,yan,m,19,900), Employee_two(7,yi,m,18,1000),Employee_two(8,xiu,m,21,680), Employee_two(9,su,m,17,1500),Employee_two(10,men,m,22,700) ; cout职工信息数据显示如下:; for(int i = 0;i display(); cout n; coutn; cout职工信息简表如下:n; for(int j = 0;j display(); coutn; cout实际对象信息为:n; printer(w2); coutn; return 0

22、; 4.程序截图:(四).高校人事管理系统:1、问题描述(功能要求): 某高校,主要人员有:在职人员(行政人员、教师、双肩挑人员(注:教师编制,担任领导职务)、退休人员、返聘人员和临时工。现在,需要存储这些人员的人事档案信息:编号、姓名、性别、年龄、职务、职称、政治面貌、最高学历、任职时间、来校时间。要求: 1) 添加删除功能:能根据学校人事的变动情况,添加删除记录;2) 查询功能:能根据编号和姓名进行查询;3) 编辑功能(高级):根据查询对相应的记录进行修改,并存储;4) 统计功能:能根据多种参数进行人员的统计(在职人数、党员人数、女工人数、高学历高职称人数);5) 保存功能:能对输入的数据

23、进行相应的存储,要求重载插入和提取符以完成数据的保存和打开。6) 人员编号在生成人员信息时同时生成,每输入一个人员信息,编号顺序加1。 2、问题的解决方案: 根据系统功能要求,可以将问题解决分为以下步骤:1) 应用系统分析,建立该系统的功能模块框图以及界面的组织和设计;2) 分析系统中的各个实体及它们之间的关系包括属性和行为;3) 根据问题描述,设计系统的类层次;4) 完成类层次中各个类的描述(包括属性和方法);5) 完成类中各个成员函数的定义;6) 完成系统的应用模块;7) 功能调试;完成系统总结报告以及系统使用说明书。 高校人事管理系统包括的功能:1.流程图 结束 动态增加容量增加教职工删

24、除教职工显示教职工查找教职工修改教职工统计职务人数执行销毁函数退出 开始 选择函数 开始 开始 开始 选择函数 选择函数 选择函数v统计职务人数删除教职工增加教职工查找教职工显示教职工修改教职工执行销毁函数退出执行销毁函数退出修改教职工显示教职工查找教职工增加教职工删除教职工统计职务人数v 动态增加容量 结束2程序优缺点:优点:采用动态类数组建立,并设立了数组的有效长度,并且自动增加数组长度,不必使用文件结构,降低了空间复杂度,代码规范可读性性强,封装紧密,安全。采用了数据结构链表的思想缺点:界面设计有所欠缺。部分函数算法还需加强3程序代码:#include #include #include

25、 #includeusing namespace std;#define SIZE_INTE 10 / 初始类数组的长度 int usedsize = 0; / 类数组的有效长度 class Personnel_Staff /人员类public:void Add(); /新增教职工信息void Display(); /显示已有教职工信息void Edit(); /修改教职工信息bool Search(int Num ,char *Na); /查找教职工void Delete(); /删除教职工信息void State(); /统计信息 int GetSer_Number() return Se

26、r_Number; int GetAge() return Age; int GetOff_Time() return Off_Time; int GetStart_Time() return Start_Time; char *GetName() return Name; char *GetSex() return Sex; char *GetJob() return Job; char *GetTitle_Po() return Title_Po; char *GetPol_Status() return Pol_Status; char *GetEdu_Certi() return Ed

27、u_Certi; private:int Ser_Number; /编号int Age; /年龄int Off_Time; /任职时间int Start_Time; /来校时间char Name20; /姓名char Sex20; /性别char Job20; /职务char Title_Po20; /职称char Pol_Status20; /政治面貌char Edu_Certi20; /学历;/#*新增教职工信息void Personnel_Staff:Add()/Tusedsize = usedsize;int f = 1;cout #新增职工档案# endl;cout Ser_Numb

28、er;/ser_Number = usedsize;cout Name;cout Sex;cout Age;while (1)cout Job;if ( strcmp(Job,行政) = 0 | strcmp(Job,教师) = 0 | strcmp(Job,双肩挑) = 0 | strcmp(Job,退休) = 0 | strcmp(Job,返聘) = 0 | strcmp(Job,临时工) =0)break;elsecout 错误! 请重新输入 ! endl; while (1)cout Title_Po;if (strcmp(Title_Po,无) = 0| strcmp(Title_P

29、o,讲师) = 0| strcmp(Title_Po,副教授) = 0| strcmp(Title_Po,教授) = 0)break;elsecout 错误! 请重新输入 ! endl;while (1)cout Pol_Status;if (strcmp(Pol_Status,群众)|strcmp(Pol_Status,党员)|strcmp(Pol_Status,团员)=0)break;elsecout 错误! 请重新输入 ! endl;while (1)cout Edu_Certi;if (strcmp(Edu_Certi,博士后) = 0| strcmp(Edu_Certi,学士) =

30、0| strcmp(Edu_Certi,硕士) = 0| strcmp(Edu_Certi,博士) = 0) break; elsecout 输入有误,请重新输入! endl;cout Off_Time;cout Start_Time;cout *添加成功* endl;void SetAdd(Personnel_Staff p,int *val) /输出参数 val p*val.Add(); (*val)+; /#输出教职工的档案void Personnel_Staff:Display()cout 输出所选教职工的档案 endl;cout 编号: Ser_Number endl;cout 姓名

31、: Name endl;cout 性别: Sex endl;cout 年龄: Age endl;cout 职称: Title_Po endl;cout 政治面貌: Pol_Status endl;cout 学历: Edu_Certi endl;cout 任职时间: Off_Time endl;cout 来校时间: Start_Time endl;cout 输出结束 endl;cout = 0) for (int i = 0;i val;i+) pi.Display(); elsecout tt没有数据成员 endl;/#查找已用的教职工信息bool Personnel_Staff:Search

32、(int Num ,char *Na ) if (Num = Ser_Number) return true;if (!strcmp(Na, Name) return true; return false;void SetSearch(Personnel_Staff *p,int val)cout #查找已有的教职工 endl;cout 1、按编号查找 / 2、按姓名查找 choice; /choice=1|choice=2switch (choice) case 1: cout Num; for(int i = 0;i val;i+) if ( pi.Search(Num, ) ) pi.D

33、isplay(); break; case 2: cout Na;for(int i = 0;i val;i+) if ( pi.Search(-1,Na) ) pi.Display(); break;/#修改已有的教职工信息void Personnel_Staff:Edit()int n = 0,renumber = 0,reage = 0,flag = 1,rectime = 0,retime = 0;int N = 10000;char rename20, rezhiwu20, rezhicheng20, repolicyface20, rexueli20, resex10;cout请对

34、这职工的信息进行修改: endl;while (flag)cout 选择修改哪项信息? endl;cout (1)编号(2)姓名(3)性别(4)年龄5)职务(6)职称(7)政治面貌(8)学历(9)来校时间(10)任职时间 endl;cout n;switch (n)case 1:while (1)cout 输入人员的编号(1 N renumber;if (renumber = 1 & renumber = N) break; elsecout 输入有误,请重新输入! endl;Ser_Number = renumber;cout 编号修改成功 endl;cout endl;flag = 0;b

35、reak;case 2:cout rename;strcpy(Name, rename);cout 姓名修改成功 endl;cout endl;flag = 0;break;case 3:cout resex;strcpy(Sex, resex);cout 姓别修改成功 endl;cout endl;flag = 0;break;case 4:cout reage;Age = reage;cout 年龄修改成功 endl;cout endl;flag = 0;break;case 5:while (1)cout rezhiwu;if (strcmp(rezhiwu,行政) = 0| strcm

36、p(rezhiwu, 教师) = 0 | strcmp(rezhiwu,双肩挑) = 0|strcmp(rezhiwu,退休) = 0 | strcmp(rezhiwu,返聘) = 0 | strcmp(rezhiwu,临时工)=0) break; elsecout 输入有误,请重新输入! endl;strcpy(Job, rezhiwu);cout 职工分类修改成功 endl;cout endl;flag = 0;break;case 6:while (1)cout rezhicheng;if (strcmp(rezhicheng,无) = 0 |strcmp(rezhicheng,讲师) = 0 |strcmp(rezhicheng,副教授) = 0 |strcmp(rezhicheng,教授) = 0 )

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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