课程设计高级语言程序设计公司人员信息管理系统.doc
课程设计-高级语言程序设计公司人员信息管理系统 辽 宁 科 技 大 学课程设计说明书设计题目: 高级语言程序设计 公司人员信息管理系统 学院、系: 电子与信息工程学院 专业班级: 计算机 学生姓名: 指导教师: 成 绩: 2012年 7月 11日目 录一、 面向过程部分设计1小程序设计.12小系统设计83.总结 8二、面向对象部分设计1小程序设计92小系统设计2641报告内容一、面向过程部分1、小程序设计(1)分析程序功能与要求:一数组中已存放了10个有序的整数,现由键盘输入一个整数,将此数插入到该数组中,使数组仍然是有序的功能实现:#include using namespace std;void main int a11 1,2,3,4,5,6,7,8,9,10 ;int k,i,x;cout "input a number:"cin x;for i 0;i 10;i+ if ai x k i;break; for i 9;i k;i- ai+1 ai;ak x;for i 0;i 11;i+ cout ai endl; 第 1页界面设计及实现:(2)分析程序功能与要求:输入20个整数存入数组中,输出其中的偶数及偶数之和功能实现:#include using namespace std;void main int i,num20,sum 0;for i 0;i 20;i+ cin numi;if numi%2 0 cout num i endl;sum sum+numi; cout "sum " sum endl;第 2页 界面设计及实现:(3)分析程序功能与要求:输出50100间的所有素数,其中判断一个数是否是素数用函数完成功能实现:#include #include using namespace std;int IsPrimeNumber int n int i,t1;for i 2;i n;i+ if n%i 0 t1 0;break; if i n t1 1;return t1; 第 3页void main int i; for i 50;i 100;i+ if IsPrimeNumber i cout i " " 界面设计及实现:(4)分析程序功能与要求:有一个一维数组score,内放10个学生成绩,求平均成绩功能实现:#include using namespace std; void main int i;int a10,sum 0,n; 第 4页for i 0;i 10;i+ cin ai;for i 0;i 10;i+ sum sum+ai;n sum/10;cout "n " n endl; 界面设计及实现:(5)分析程序功能与要求:从键盘输入两个字符串,将它们合并成一个新的字符串功能实现:#include using namespace std;void main char*p,*q;char a180,b180; 第 5页cin a b;for p a;*p! '0'p+ ;for q b;*q! '0'q+ *p *q;p+; *p '0'cout a endl; 界面设计及实现:(6)分析程序功能与要求:编写函数a char *s1,char *s2 ,将字符串s2连接到字符串s1的后面功能实现:#include void mystrcat char*str1,char*str2 ;void main char str120;char str210; 第 6页cout "input two strings:" endl;cin str1;cin str2;mystrcat str1,str2 ;cout "the result is:" str1 endl; void mystrcat char*str1,char*str2 while *str1! '0' str1+;while *str2! '0' *str1 *str2;str1+,str2+; *str1 '0' 界面设计及实现:第 7页2、小系统设计设计一个学生成绩管理小系统设计一个实用的小型学生成绩管理系统,具有输入学生信息、计算学生平均分,按任意成绩(各科或平均分)降序排序或输出学生信息的功能。以便使学生了解和掌握如何编制一个应用程序,从而进一步锻炼实际编程能力。面向对象部分总结:为期五天的课程设计让我学会了很多,也巩固了以前掌握不牢固的知识,让我重新认识到了自己的不足,设计第一个程序时,把数组的有关知识进行了回忆,设计第二个计算偶数和的程序时候,刚开始设计出来的程序计算的是所有数字的和,后来才发现少了一个大括号,这让我认识到了在编程中细节的重要性。编素数那个程序时遇到了很大的困难,第一次编的以函数形式进行编写,却不符合题的要求,第二次符合却不是函数,在老师的帮助下,最后终于编写出了正确的程序。在整个编写过程中,有很多自己不明白的地方都向同学请教解决的,加上老第 8页师的指导,在编程过程中对程序挑错的时候是最乏味的。不过,由于自己对知识的灵活运用能力不强,还有很多地方不尽如人意。我会在下学期的学习中去不断提升自己。二、面向对象部分1、小程序设计(1)分析程序功能与要求:构建一个类score,其中用私有数据成员number表示学号,computer、english、average分别表示计算机成绩、英语成绩和平均分数。公有成员函数inscore 用于输入学号和各科成绩,以及计算平均分数;成员函数showscore 用来输出成绩。要求:在主程序定义stu1为score类的对象,stu2为指向score类对象的指针,由它们分别调用成员函数inscore 和showscore 来实现输入、计算和输出功能。设计各层次的类:设计了一个score类,数据成员有computer 计算机 ,english 英语 ,average 平均分 ,成员函数有char s,double x,y.各个类的实现:#include using namespace std;class score private:string number;double computer,english,average;public:score score 第 9页 void inscore char s20;double x,y;cout "请输入学号:"cin s;cout "请输入各科成绩:"cin x y; number s; computer x;english y; average x+y /2; void showscore cout "计算机成绩为:" computer endl;cout "英语成绩为:" english endl;cout "平均成绩为:" average endl; ;void main score stu1;score*stu2 &stu1;stu1.inscore ;stu2- showscore ; 界面设计及实现: 第 10页(2)分析程序功能与要求:设计一个学生成绩管理系统,能输入学生的学号、姓名和成绩等数据,能按成绩从高到低进行排序,并能将排序的结果输出。提示: 设计一个学生类student,包含三个私有数据成员,即学号sno、姓名sname和成员score 在学生类student中再设计三个公有成员函数 setdata、display和getscore,分别用于完成输入学生信息、输出学生信息、返回某个学生成绩的功能 定义一个manage类,它有一个student类型的私有数据成员snum,其中num表示学生人数 在manage类中分别定义三个公有成员函数input、output、sort,分别用于完成输入、输出和排序功能。设计各层次的类:设计了一个student类, 数据成员有:学号sno,姓名sname,成绩score,成员函数有: setdata、display和getscore。设计了一个manage类,数据成员有学生人数snum,成员函数有:输入input、输出output、排序sort。各个类的实现: 第 11页#include #include #define num 5class student private:int sno;char sname20;float score;public:void setdata int no,char name,float s sno no;strcpy sname,name ; score s; void display cout sno "t" sname "t" score endl; float getscore return score; ;class manage private: 第 12页student snum;public:void input ;void output ;void sort ; ;void manage:input int i;int no;char name20;float score;for i 0;i num;i+ cout "输入第" i+1 "人:"cin no name score;si.setdata no,name,score ; void manage:output int i;cout "结果:" endl;cout "no " "name " "score " endl;for i 0;i num;i+ si.display ; 第 13页void manage:sort int i,j;student t;for i 0;i num-2;i+ for j 0;j num-i-2;j+ if sj.getscore sj+1.getscore t sj;sj sj+1;sj+1 t; void main manage m;m.input ;m.sort ;m.output ; 界面设计及实现: 第 14页继承与派生3. 分析程序功能与要求:设计一个图书借阅管理系统。每本书有书号、书名和作者姓名属性,读者有借书证号、读者姓名和每位读者最多能够借阅的图书数量属性。(要求使用类的继承和派生知识点实现)提示:由于图书和读者都具有编号和名称两个属性,所以可以定义一个能够对编号和名称进行管理的类object,然后在object类的基础上派生出图书类book和读者类reader。设计各层次的类:设计了一个object类,数据成员有number,name,成员函数有show。在object类的基础上派生出图书类book和读者类reader。各个类的实现:#include #include class object private: 第 15页int number;char *name;public:object int N,char *na number N;name na; void show cout "书号(学号):" number "t" "书名(借书人):" name " " ;class book:public object private:char* writername;public:book int N,char* na,char*wna :object N,na writername wna; void show object:show ; cout "作者:" writername endl; 第 16页 ;class reader:public object private: int book;public:reader int N,char*na,int m :object N,na book m; void show object:show ;cout "最大借书量:" book endl; ;void main book b 003,"c+","李波" ;b.show ;reader c 4046,"赵月",8 ;c.show ; 界面设计及实现: 第 17页虚函数与多态4. 分析程序功能与要求:定义一个抽象类Shape,在其中说明一个纯虚函数area 作为一个接口,用来计算圆形、三角形、正方形和长方形的面积。要求由抽象类派生出圆形、三角形、正方形和长方形4个派生类。在各派生类中分别实现求各个图形的面积。设计各层次的类:设计了一个类Shape,成员函数有double GetArea,在Shape类的基础上派生出Circle类(圆形),数据成员有radius 半径 ,triangle类(三角形),数据成员有high(高),bottom(底),square类(正方形),数据成员有rim(边),Rectangle类(长方形),数据成员有length(长),width(宽)。各个类的实现:#include class Shape public:Shape Shape virtual double GetArea 0; 第 18页 ;class Circle :public Shape public:Circle double r radius r; Circle double GetArea return 3.14*radius*radius; private:double radius; ;class triangle:public Shape public:triangle double h,double b high h;bottom b; triangle ;double GetArea 第 19页return 0.5*high*bottom; private:double high;double bottom; ;class square:public Shape public:square double r rim r; square ;double GetArea return rim*rim; private:double rim; ;class Rectangle:public Shape public:Rectangle double L,double W length L;width W; 第 20页 Rectangle ;double GetArea return length*width; private:double length;double width; ;void main Shape *s; s new Circle 10 ;cout "The area of the Circle is " s- GetArea endl; delete s; s new triangle 10,20 ;cout "The area of the triangle is " s- GetArea endl;delete s; s new square 10 ;cout "The area of the square is " s- GetArea endl; delete s; s new Rectangle 10,20 ;cout "The area of the Rectangle is " s- GetArea endl;delete s; 界面设计及实现: 第 21页模板5. 分析程序功能与要求:用函数模板的方式设计可以对某种数据类型的数组中的数据用选择法进行从大到小排序,然后用整型数据和字符型数据进行验证。设计各层次的类:设计了一个template类,数据成员有data,m,成员函数有sort。各个类的实现:#include template void sort T data,int m int i,j,k;T temp;for i 0;i m-2;i+ k i;for j i+1;j m-1;j+ if datak dataj 第 22页k j;if k! i temp datak;datak datai;datai temp; template void display T data,int m int i;for i 0;i m-1;i+ cout datai " "cout endl; void main int source -7,-3,-1,9,8 ;char c 'a','q','f','e','d','h' ;cout "排列前顺序为:"display source,5 ;sort source,5 ;cout "排序后顺序为:" display source,5 ;cout "排列前的序列为:"第 23页display c,6 ;sort c,6 ;cout "排序后的序列为:"display c,6 ; 界面设计及实现:文件6. 分析程序功能与要求:编写一个程序,统计data.txt文件的行数,并将所有行前加上行号后写到data1.txt文件中。算法提示:行与行之间以回车符分隔,而getline 函数以回车符作为终止符。因此,可以采用getline 函数读取每一行,再用一个变量i计算行数。设计各层次的类:首先在电脑D盘建立一个txt格式的写字板,命名为record,打开写字板,输入几行字符串,回到C+运行界面运行程序。各个类的实现:#include 第 24页#include using namespace std;void main char line1000;int 100;ifstream txtfile;txtfile.open "d:record.txt" ;if !txtfile cerr "record.txt open error!" endl;exit 1 ; int i 1;while txtfile.getline line, cout i line endl;i+; cout "总行数目 " i-1 endl;txtfile.close ; 界面设计及实现: 第 25页2、小系统设计公司人员信息管理系统.分析程序功能与要求:本系统主要对公司人员的基本信息进行录入和维护和工资管理模块的处理。 根据各个员工的不同职称(职务),参照不同的工资标准,进行工资的计算,并能完成查询、打印功能。对于系统管理员,可对人员信息进行删除操作。二、设计各层次的类:设计了一个职工类Employee,职工数据类Database,数据成员有:tag删除标记, no职工编号,name职工姓名,salary职工工资,成员函数有Database。三、各个类的实现#include #include #include #include const int r 100; class Employee第 26页 int tag;int no; char name20; char zw20; int salary; public: Employee char *getname return name; int gettag return tag; int getno return no; int getsalary return salary; void setzw char q strcpy zw,q ; void setname char na strcpy name,na ; void getsalary int sa salary sa; void delna tag 1; void addemp int n,int sa,char *na,char *q tag 0; no n; salary sa; strcpy name,na ; strcpy zw,q ; 第 27页 void disp cout "" setw 10 no "" setw 10 name "" setw 10 salary "" setw 10 zw "" endl; cout "" endl; ; class Database int top; Employee readr; public: Database Employee s; top -1; fstream file "employee.txt",ios:in ; while 1 file.read char * &s,sizeof s ; if !file break; top+; readtop s; file.close ; void clear 第 28页top -1; int addemp int n, int sa,char *na,char*q Employee *p query n ; if p NULL top+; readtop.addemp n,sa,na,q ; return 1; return 0; Employee *query int empid for int i 0;i top;i+ if readi.getno empid && readi.gettag 0 return &readi; return NULL; Employee *query1 char empna20 for int i 0;i top;i+ if readi.getname empna &&readi.gettag 0 return &readi; return NULL; void disp 第 29页 for int i 0;i top;i+ readi.disp ; void empdata ; Database fstream file "employee.txt",ios:out ; for int i 0;i top;i+ if readi.gettag 0 file.write char* &readi,sizeof readi ; file.close ; ; void Database:empdata int choice 1; int m 1;int b 1; char rname20; int empid; int empsa;char q20; Employee *r; while choice! 0 cout "职工维护 1:新增 2:更改 3:删除 4:查找 5:显示 6:全删 0:退出" cin choice; switch choice 第 30页case 1: cout setw 50 " n" cout setw 50 " 请选择您所需的操作 n" cout setw 50 " 经理: 1,回车键并按 n" cout setw 50 " 业务经理:2,并按回车键 n" cout setw 50 " 普通职工:3,并按回车键 n" cout setw 50 " n" cin m; while m! 0 switch m case 1: cout "输入经理编号:" cin empid; cout "输入奖金: " cin empsa; cout "输入经理姓名:" cin rname; addemp empid,8000+empsa,rname,"经理" ; break; case 2: cout "输入业务经理编号:" cin empid; cout "输入月提成: " cin empsa; cout "输入业务经理姓名:" cin rname; addemp empid,4000+empsa,rname,"业务经理" ; break; 第 31页case 3: cout "输入职工编号:" cin empid; cout "输入工资: " cin empsa; cout "输入职工姓名:" cin rname; addemp empid,empsa,rname,"普通职工" ; break; break; break; case 2: cout "输入职工编号:" cin empid; r query empid ; if r NULL cout "该职工不存在" endl; break; cout "输入新的工资:" endl; cin empsa; r- getsalary empsa ; cout "请输入新的职务" endl; cin q; r- setzw q ; addemp empid,empsa,rname,q ; 第 32页break; case 3: cout "输入职工编号:" cin empid; r query empid ; if r NULL cout "该职工不存在" endl; break; r- delna ; break; case 4: cout setw 50 " n" cout setw 50 " 请选择您所需的操作 n" cout setw 50 " 按编号查找1,并按回车键 n" cout setw 50 " 返回 2,并按回车键 n" cout setw 50 " n" cin b; while b! 0 switch b case 1: cout "输入职工编号:" cin empid; r query empid ; if r NULL cout "该职工不存在" endl; 第 33页break; cout "" endl; cout "" setw 10 "编