课 程 设 计 报 告
课程名称 《C#程序设计》
课题名称 职工信息管理系统
专 业 信息管理与信息系统
班 级 信管1301
学 号 ************
姓 名
指导教师
2015年 6 月 10 日
湖南工程学院
课 程 设 计 任 务 书
课程名称 《C#程序设计》
课 题 职工信息管理系统
专业班级 信管1301
学生姓名
学 号 ************
指导老师 李峰、赵锦元、谢雅
审 批
任务书下达日期 2015 年 6 月 10 日
任务完成日期 2015 年 6 月 27 日
一、设计内容与设计要求
1.课程设计目的:
全面熟悉、掌握计算机系统与系统软件基本知识,增强对不同的问题运用和灵活选择合适的数据结构以及算法描述的本领,熟悉编制和调试程序的技巧,掌握分析结果的若干有效方法,进一步提高上机动手能力,增强面向对象程序设计概念,熟悉C++语言编程,养成提供文档资料的习惯和规范编程的思想,为后继课程的实验以及课程设计打下较扎实的基础。
进一步提高上机动手能力,培养使用计算机解决实际问题的能力,为后继课程(数据结构、数据库和汇编语言等课程)的实验以及课程设计,特别是自学、毕业论文的完成打下扎实的基础。
2.课题题目
职工信息管理系统
3.设计要求:
具有功能:
1、添加信息2、显示统计数据3、查找学生成绩4、 修改信息5、删除信息6、插入信息 7、显示全部信息8、退出本系统
课程设计报告规范
1、完成系统需求分析:包括系统设计目的与意义;系统功能需求;输入输出的要求。
2、完成系统概要设计:程序由哪些模块组成以及模块之间的层次结构、各模块的调用关系;每个模块的功能;课题涉及的数据结构和数据库结构;即要存储什么数据,这些数据是什么样的结构,它们之间有什么关系等。
3、完成系统详细设计:包括采用C++语言定义相关的数据类型;写出各模块的类C++码算法;画出函数的调用关系图。
4、调试分析、设计体会、测试数据:准备典型的测试数据和测试方案,包括正确的输入及输出结果和含有错误的输入及输出结果;程序调试中遇到的问题以及解决问题的方法;课程设计过程经验教训、心得体会。
5、关键源程序(带注释)
6、其他
1)设计正确,方案合理。
2)界面友好,使用方便。
3)程序精炼,结构清晰。
4)设计报告5000字以上,含程序设计说明、系统的功能框图、流程图、源程序清单等。
5)实际操作过程中遇到的问题及解决方法:设计总结及心得体会.
6)上机演示。
二、进度安排
第 16 周 星期一 14时:00分
星期二 14时:00分
星期四 14时:00分
星期五 14时:00分
第 17 周 星期一 14时:00分
星期二 14时:00分
1 系统需求分析
1.1系统设计目的与意义
全面熟悉、掌握计算机系统与系统软件基本知识,增强对不同的问题运用和灵活选择合适的数据结构以及算法描述的本领,熟悉编制和调试程序的技巧,掌握分析结果的若干有效方法,进一步提高上机动手能力,增强面向对象程序设计概念,熟悉C++语言编程,养成提供文档资料的习惯和规范编程的思想,为后继课程的实验以及课程设计打下较扎实的基础。
进一步提高上机动手能力,培养使用计算机解决实际问题的能力,为后继课程(数据结构、数据库和汇编语言等课程)的实验以及课程设计,特别是自学、毕业论文的完成打下扎实的基础。
1.2系统功能需求
职工信息管理系统,具有录入职工信息,职工信息的输入、输出功能
可以在数据库中查询、修改、插入和删除所保存的记录,而且具有对职工信息进行排序并显示的功能;并具有退出该系统模块的功能。
1.3输入输出要求
本系统是一个职工信息管理系统,采用VC++6.0 编译器作为开发环境,这个环境是我们在学习的C++平台。输入数据类型主要是char、int、float等数据类型,输入内容包括:工号、姓名、性别、学历、年龄、工资、地址、电话等数据。用户在输入职工信息保证输入数据格式的正确性,系统不会自动检测输入的数据是否正确可用。输出形式与输入形式类似,根据需要可以选择显示输入的各项内容,还可以修改、删除、查找、显示所有、保存等功能。
2 总体设计
2.1总体设计图
图2.1.总体设计流程图
2.2 各函数之间的调用关系
图2.2 各函数的调用关系
3 详细设计
3.1 采用C++语言定义的相关数据类型:
在程序中主要用的是c++面向对象的编程方法,主题是用类来写的,通过各成员属性和成员方法来实现各种功能。数据类型有整形(int)、字符型(char)、字符串型(string),还有各种静态变量:
class worker
{
public:
worker(){}
void show(); //职工信息显示
~worker(){}
friend class WorkerList;
private:
string num,name,sex,edu,address,tel;
int age,salary;
};
class WorkerList
{
private:
worker w[N];
int NUM; //用来计算职工数目
int count; //用来暂时记录当前操作第几个职工
public:
void add(); //职工信息录入
void sort(); //职工信息排序
void search(); //职工信息查找
void dele(); //职工信息删除
void modify(); //职工信息修改
void save(); //职工信息以文件形式保存
void showworker();//显示职工信息在屏幕上
WorkerList()
{
NUM=0; count=0;
}
};
3.2 各功能模块的实现
(1)职工信息添加函数:职工的信息首先是按照工号来输入的,在输入的同时先与已经存在的信息进行比较,如果输入的工号已经存在,则需要重新输入,如果还没有存在,则依次出入职工的工号,姓名,性别,学历,年龄,工资,地址和电话,其实现代码如下:
for(int i=0;i { cout<<"此职工编号已存在,请重新输入:"< cin>>num; } w[NUM].num=num; cout<<"姓名:";cin>>w[NUM].name; cout<<"性别:";cin>>w[NUM].sex; cout<<"学历:";cin>>w[NUM].edu; cout<<"年龄:";cin>>w[NUM].age; cout<<"工资:";cin>>w[NUM].salary; cout<<"地址:";cin>>w[NUM].address; cout<<"电话:";cin>>w[NUM].tel; ++NUM; count=NUM; } (2)职工信息显示函数:进入主菜单之后,通过输入选择项,程序的show()成员函数会直接调用已经存储的职工的信息,直接把所有的职工信息都显示出来,其主要的代码如下: void worker::show() //职工信息显示函数实现 { cout<<"工号:"< (3)职工信息修改函数:进入这一模块功能之后,程序是已经定义按照工号来修改,先输入你需要修改的工号,查找你输入的工号的职工信息是否已经存储,否,则需要重新输入,是的话,进入一个子菜单,选择你需要修改的选项,选择某一项之后,在进行你需要修改的内容,只后在直接保存职工的信息,最后在确认你是否返回主菜单,其主要代码如下: cout<<"***********************************************"< { cout<<"输入有误,请重新输入:"< } switch(i3) { case 1: cout<<"请输入新的职工工号:"; cin>>w[k].num; cout<<"修改信息已保存,现返回主菜单:"< case 2: cout<<"请输入新的职工姓名:"; cin>>w[k].name; cout<<"修改信息已保存,现返回主菜单:"< break; case 3: cout<<"请输入新的职工性别:"; cin>>w[k].sex; cout<<"修改信息已保存,现返回主菜单:"< break; case 4: cout<<"请输入新的职工学历:"; cin>>w[k].edu; cout<<"修改信息已保存,现返回主菜单:"< break; case 5: cout<<"请输入新的职工年龄:"; cin>>w[k].age; cout<<"修改信息已保存,现返回主菜单:"< break; case 6: cout<<"请输入新的职工工资:"; cin>>w[k].salary; cout<<"修改信息已保存,现返回主菜单:"< break; case 7: cout<<"请输入新的职工地址:"; cin>>w[k].address; cout<<"修改信息已保存,现返回主菜单:"< break; case 8: cout<<"请输入新的职工电话:"; cin>>w[k].tel; cout<<"修改信息已保存,现返回主菜单:"< if(NUM<=0) { cout<<"没有职工信息存入,系统将返回主菜单"< else cout<<"***********************************************"< flag=0; k=j; cout<<"查询的职工信息如下:"< int j2=0,k2; int flag2=1; while(flag2) { for(;j2 { flag2=0; k2=j2; cout<<"查询的职工信息如下:"< cout<<"请输入要查询的职工的学历:"< int j4=0,k4; int flag4=1; while(flag4) { for(;j4 { flag4=0; k4=j4; cout<<"查询的职工信息如下:"< (5)职工信息排序函数:在程序中的排序这一个功能模块之中,有一个子菜单的选择项,排序的方式是通过工资的多少来升序或者降序排列。排序的的方法是用的冒泡排序,将所有已经存储的职工的工资的多少用冒泡的方法来排序,冒泡法:有N个职工的工资,则需要两个for()循环,外循环有N-1次,最后一个职工的工资不用排序就已经出来,内循环,在第J个则它需要循环的次数为N-J-1次。其主要的程序如下: cout<<"***********************************************"< cin>>i5; while(i5<0||i5>2) { cout<<"输入有误,请重新输入:"< } if(i5==1) { for(int i=0;i { worker temp; temp=w[j]; w[j]=w[j+1]; w[j+1]=temp; } else if(i5==2) { for(int i=0;i temp=w[j]; w[j]=w[j+1]; w[j+1]=temp; } (6)职工信息删除函数:在程序中删除模块的功能,程序已经定义是按照工号来删除职工的信息,先比较你输入的工号的职工信息是否已经存储,否,则需要重新输入;是,通过一个判断你是否真的需要删除这一职工的信息,删除职工信息的方法是将后一个职工的信息区覆盖前一个职工的信息来达到删除的功能,其主要代码如下: cout<<"请输入需要删除信息职工的工号:"< cin>>num3; int j=0,k; int flag=1; while(flag) { for(;j flag=0; k=j; break; } } if(flag) { cout<<"不存在此员工,请重新输入:"< cin>>num3; } } cout<<"确认删除请输入Y,返回主菜单请输入N "< cin>>p; while(1) { if(p=="y"||p=="Y") { cout<<"员工信息已删除!"< int j=i; for(;j<=count-1;j++) w[j]=w[j+1]; count--; break; } else if(p=="n"||p=="N") { menu();} else { cout<<"输入有误,请重新输入:"; cin>>p; } } } 4调试分析及设计体会 4.1调试运行的结果 (1)添加函数:运行程序之后,进入主菜单,通过选择项进入添加职工信息的功能模块,按照提示输入职工的工号,姓名,性别,学历,年龄,工资,地址和电话,一次输入之后再保存职工的信息,输入三次,得到如图4.1所示。 图4.1 添加职工图 (2)修改函数:再主菜单通过选择项进入修改职工功能模块,输入你要修改职工信息的工号,你输入的工号在存储的信息之中,进入一个子菜单,选择你要修改的的内容如图,选择修改工号为3的职工的姓名,通过修改后的职工信息如图4.2所示。 图4.2 按工号修改图 (3)删除函数:进入主菜单通过选择项,在删除功能模块中系统提示你要删除的职工信息,你输入职工工号,如果在已经存储的文件中,则会让你再次确认是否删除该职工的信息,如图4.3是删除职工工号为2的的职工信息,它的结果如图4.3所示。 图4.3 按工号删除职工图 (4)排序函数: 在排序功能中,有一个子菜单,选择你是升序还是降序排列,图4.4,是按照升序选择项进行升序排列得到的结果,工资选择升序排列之后的结果如图4.4所示。 图4.4 按工资升序图 (5)查找函数:在查找功能模块之中有按工号,姓名,学历三种查询方式查询,图4.5通过工号查询,输入工号3之后,继续运行程序,得到的结果如图4.5所示。 图4.5 按工号查找职工图 4.2 程序调试中的问题 (1)语句的最后忘记了加上“;”,使程序发生错误; (2)有时会多打一个“}”或者少打一个“}”; (3)考虑问题不全面,有漏洞,进行了多次完善。 5心得体会 在为期两周的课程设计中,我学会了很多东西。将课堂上学会的理论知识运用到实际生活中去,使我把知识掌握的更加的牢固,与此同时也提高了动手实践能力。C++的课程设计让我知道了面向对象编程的优点,以及给我们带来的便利性。整体地评价这次课程设计,我认为收获很大,正如上面所说的那样,通过课程设计,既复习了以前的旧知识,又学到了一些新的知识;设计增强了我们用所学知识去解决具体问题的能力,进一步培养了我们思考问题和解决问题的能力。总之,通过这次课程设计,我收获颇丰,相信会为自己以后的学习和工作带来很大的好处。最重要的还是激发了我编程的兴趣和热情,让我从一个只懂理论变成了能做一些小型程序,让我对编程更加热爱了。 6附录 6.1源代码 #include #include"string" #include #include #include #define N 100 //N作为最大职工总数 int f=0; //f作为开关 using namespace std; string p; //p作为接收菜单选项的字符串 void menu(); //显示菜单 class worker { public: worker(){} void show(); //职工信息显示 ~worker(){} friend class WorkerList; private: string num,name,sex,edu,address,tel; int age,salary; }; class WorkerList { private: worker w[N]; int NUM; //用来计算职工数目 int count; //用来暂时记录当前操作第几个职工 public: void add(); //职工信息录入 void sort(); //职工信息排序 void search(); //职工信息查找 void dele(); //职工信息删除 void modify(); //职工信息修改 void save(); //职工信息以文件形式保存 void showworker();//显示职工信息在屏幕上 WorkerList() { NUM=0; count=0; } }; void menu() //显示菜单 { cout< void domain() //主菜单函数实现 { WorkerList wl; while(1) { system("cls"); menu(); cout<<"请选择数字编号0~7"< cin>>i1; while(!(i1>=0&&i1<=7)) { cout<<"输入有误,请重新输入:"< } switch(i1) {case 1:wl.add();break; case 2:wl.modify();break; case 3:wl.dele();break; case 4:wl.sort();break; case 5:wl.search();break; case 6:wl.showworker();break; case 7:wl.save();break; case 0:cout<<"系统退出!!"< default: break; } cout<<"是否返回主菜单? Y/N"< if(p=="n"||p=="N") { cout<<"系统退出!!"< } } } void WorkerList::add() //职工信息添加函数实现 { cout<<"请输入职工信息:"< string num; cin>>num; for(int i=0;i { cout<<"此职工编号已存在,请重新输入:"< cin>>num; } w[NUM].num=num; cout<<"姓名:";cin>>w[NUM].name; cout<<"性别:";cin>>w[NUM].sex; cout<<"学历:";cin>>w[NUM].edu; cout<<"年龄:";cin>>w[NUM].age; cout<<"工资:";cin>>w[NUM].salary; cout<<"地址:";cin>>w[NUM].address; cout<<"电话:";cin>>w[NUM].tel; ++NUM; count=NUM; } void worker::show() //职工信息显示函数实现 { cout<<"工号:"< void WorkerList::modify() //职工信息修改函数实现 { if(NUM<=0) { cout<<"没有职工信息存入,系统将返回主菜单"< } cout<<"请输入需要修改信息职工的工号:"< cin>>num1; int j=0,k; int flag=1; while(flag) { for(;j if(num1==w[j].num) { flag=0; k=j; break; } } if(flag) { cout<<"不存在此员工,请重新输入:"< cin>>num1; } } cout<<"你选择的职工的信息为:"< cin>>i3; while(i3<0||i3>8) { cout<<"输入有误,请重新输入:"< } switch(i3) { case 1: cout<<"请输入新的职工工号:"; cin>>w[k].num; cout<<"修改信息已保存,现返回主菜单:"< case 2: cout<<"请输入新的职工姓名:"; cin>>w[k].name; cout<<"修改信息已保存,现返回主菜单:"< break; case 3: cout<<"请输入新的职工性别:"; cin>>w[k].sex; cout<<"修改信息已保存,现返回主菜单:"< break; case 4: cout<<"请输入新的职工学历:"; cin>>w[k].edu; cout<<"修改信息已保存,现返回主菜单:"< break; case 5: cout<<"请输入新的职工年龄:"; cin>>w[k].age; cout<<"修改信息已保存,现返回主菜单:"< break; case 6: cout<<"请输入新的职工工资:"; cin>>w[k].salary; cout<<"修改信息已保存,现返回主菜单:"< break; case 7: cout<<"请输入新的职工地址:"; cin>>w[k].address; cout<<"修改信息已保存,现返回主菜单:"< break; case 8: cout<<"请输入新的职工电话:"; cin>>w[k].tel; cout<<"修改信息已保存,现返回主菜单:"< break; case 0: menu(); default: break; } } void WorkerList::showworker() //职工信息显示函数实现 { if(NUM<=0) { cout<<"没有职工信息存入,系统将返回主菜单"< } else cout<<"已保存的职工信息如下:"< cout<<"***********************************************"< } void WorkerList::search() //职工信息查询函数实现 { if(NUM<=0) { cout<<"没有职工信息存入,系统将返回主菜单"< } else cout<<"***********************************************"<