重庆科技学院《职工工资管理系统》课程设计报告11系统框图和用户使用手册1.1结构框架图下图是系统结构框架图,表明了这个系统的主要用途。图1.1系统结构框架图start调用主菜单输入ndefault添加显示创建加排序修改删除查询breakn!=0endFT0重庆科技学院《职工工资管理系统》课程设计报告21.2用户使用手册1.2.1用户须知该系统是职工工资管理系统,它是用来对职工的个人资料的存储以及工资的管理。该系统包含了职工的姓名、性别、职工号、基本工资、职务工资、补助、总工资。其中的操作有职工信息的录入、添加、显示、删除、修改、总工资排序等。(注意:输入的字母不分大小写)1.2.2使用说明1)在程序启动之后,首先显示出的是管理员的个人资料,然后按任意键继续,您可根据自己的需要来进行对职工工资的管理。2)键入1:创建职工信息,您根据提示来创建职工信息。输完后,键入1则保存当前输入的信息;输入0则返回主菜单。在输入1的情况下,如果说您需要继续输入,请按y;否则输入0返回主菜单。3)键入2:添加职工信息。如果文件里没数据或者不存在文件,键入1:创建;键入0:返回。如果已经创建了信息,则系统会输出原来的信息,并提示您输入想插入职工信息的编号,大小为1-职工的总人数。继续输入,键入1:保存;键入0:返回继续添加按y,返回按n。4)键入3:显示当前文件中的信息。按任意键返回,按0退出系统。5)键入4:显示出职工总工资排序表。按任意键返回,按0退出系统。6)键入5:进入职工信息查询界面,按1:输入职工号;按2:输入姓名。然后系统会输出相对应的信息或提示。最后按任意键返回,按0退出系统。7)键入6:删除信息。输入职工号,屏幕会显示出他的基本信息。按1:删除,按0:退出系统。然后按任意键返回。8)键入7:修改信息。输入要修改的职工号,再输入相关信息。最后按任意键返回,按0退出系统重庆科技学院《职工工资管理系统》课程设计报告32.要求与系统设计2.1要求1)巩固和加深学生对C++语言基本知识的理解,提高综合运用所学课程知识的能力。2)培养学生的实际操作能力。3)通过实际课程设计,初步掌握简单软件的分析方法和设计方法。4)了解与课程有关的工程技术规范,能正确解释和分析实验结果。5)分清各个函数的功能,总体设计应该画流程图,学会创建链表和类。2.2系统设计2.2.1职工信息的设计职工的信息包括:姓名、职工号、性别、基本工资、职务工资、补助、总工资。其中姓名和性别需要定义成char类型,职工号定义成整型(int),其余的定义为整型(double)。定义一个结构体worker用来存储职工信息。其代码如下:typedefstructWorker//定义一个职工信息的结构体{intLenName;//标识表示姓名的字符串的长度char*Name;//职工姓名longNumber;//职工号intAge;//职工年龄charSex;//职工性别doubleBasepay;//职工的基本工资doubleBonus;//职工奖金doubletotal;//总工资}worker;第一行中定义了结构体,其内包括职工姓名、职工号、职工年龄、职工性别、职工的基本工资、奖金、总工资等信息。重庆科技学院《职工工资管理系统》课程设计报告42.1.2系统功能的设计定义结构体来实现信息的各个操作,它的数据成员为结构体worker类型的指针和变量,其代码如下:voidInput(worker*p);//录入职工工资信息voidEnterFile(worker*p,ifstream*in);//以二进制方式录入文件voidOutFile(worker*p);//以二进制方式输出文件voidOutput(worker*p);//输出所有职工工资记录voidShuru();//输入职工信息voidAdd();//添加职工信息voidShow();//显示职工信息voidSort();//按职工工资进行降序排序voidSearch();//职工信息查询voidSearchNumber();//以职工号查询职工工资记录voidSearchName();//以职工姓名查询职工工资记录voidDelete();//删除指定职工工资记录voidModify();//修改指定工号职工工资记录voidMenu();//主菜单显示voidmenu1();//子菜单voidprint();//界面输入Input(worker*p)表示从键盘到内存,EnterFile(worker*p,ifstream*in)表示从内存到硬盘,Output(worker*p)表示从硬盘到内存,OutFile(worker*p)表示从内存到屏幕。其它成员函数分别是输入Shuru(),添加Add(),显示Show(),按职工工资进行降序排序Sort(),查询函数SearchNumber()职工号查找、SearchName()姓名查找,删除Delete(),修改Modify()。重庆科技学院《职工工资管理系统》课程设计报告53.各个模块的程序流程图3.1信息录入设计图3.1信息录入流程图3.2信息添加设计图中输出记录是输出文件中已有的信息。读取文件时,调用了函数Add()。start申请内存Input输入信息EnterFile键盘到内存Output(输出)endOutFile内存到硬盘硬盘到内存内存到屏幕重庆科技学院《职工工资管理系统》课程设计报告6图3.2信息添加流程图3.3总工资排序设计这个函数也需要从问件中读取信息,然后将所有数据存储在数组中,此时用到了排序的成员函数Sort(),排序时采用了冒泡排序法,这是一种很常见的排序方法,总工资排序(按从高到低),冒泡排序法简单点讲:第一个元素和第二个start读取文件找到添加功能选项输出记录输入编号n申请内存添加保存Choose==Y||yendTFFT输入flogflog==1F重庆科技学院《职工工资管理系统》课程设计报告7元素相比较,如果第一个小于第二个,则用一个临时变量来交换它们的位置(temp),然后依次比较,在第一次比较完后,就会筛选出最大的数,之后进行第二次比较,直至循环结束。循环结束后,排序完成,最后用一个for循环语句输出排序后信息。图3.3总工资排序流程图start读取文件数组初始化T输出提示F中间变量输出信息end向数组中添加元素冒泡排序n=0数组的大小n++TF重庆科技学院《职工工资管理系统》课程设计报告83.4信息查询设计3.4.1按职工号查询图3.4.1职工号查询流程图start是否查找到flog=0s!=NULLs-num==numFlog=1cout该职工信息输出提示FTFend重庆科技学院《职工工资管理系统》课程设计报告93.4.2按职工姓名查询图3.4.2职工姓名查询流程图3.5信息删除设计通过if语句来查询,则把flog=1并跳出循环通过flog来判断查询的结果,如果找到,就输出则删除此职工并保存当前文件中的所有信息。再用了do/while循环来继续输入。start是否查找到flog=0s!=NULL!strcmp(s-Name,p)Flog=1cout该职工信息输出提示FTFend重庆科技学院《职工工资管理系统》课程设计报告10图3.5信息删除流程图startflog=0s!=NULLs!=NULLs-num==numflog=1flog输出相关信息删除保存输出提示endFTFFTFFT重庆科技学院《职工工资管理系统》课程设计报告114、试验结果4.1菜单和信息录入界面当用户输入管理员的信息后,屏幕就会显示出如下界面。图4.1菜单界面用户可根据菜单界面来选择所需要的操作,如果用户按下1,则输入职工相关信息,显示:图4.2信息录入用户可根据屏幕的提示来继续输入职工的相关信息。4.2显示和添加信息界面此界面显示出了该工资管理系统中职工的总人数和职工的基本信息以及工重庆科技学院《职工工资管理系统》课程设计报告12资。按任意键返回主菜单,按8则推出系统。图4.3职工信息表显示当用户进入职工工资信息的添加功能时,如果其文件为空,则输出提示;如果不为空,则读取文件中的信息并显示在屏幕上;用户再根据提示来输入添加的编号来任意添加职工工资信息。(如图4.4)图4.4添加职工信息4.3排序和查询界面这个系统是按照职工总工资从多到少来排序的,总工资是各种工资以及其它的奖金、补贴之和。(如图4.5)图4.5职工总工资排序查询职工的信息有两种:职工号和姓名。下面显示的是按照职工号来查询的,当用户输入职工号时,如果系统中存在此人时,则输出该职工的相关信息;如果重庆科技学院《职工工资管理系统》课程设计报告13不存在时,就会提示用户。A.职工号查询B.职工姓名查询图4.6职工信息的查询重庆科技学院《职工工资管理系统》课程设计报告144.4删除职工的信息图4.7删除职工信息图4.8删除后显示职工信息重庆科技学院《职工工资管理系统》课程设计报告155、设计体会与建议5.1设计体会C++学习本是一个理论与实践相结合的学习模式,之所以老师这次要求完成课程设计报告就是加强我们的理论知识与实践结合。使我们能够在更多的实践中提升自我。通过实践的学习,我认到学好计算机要重视实践操作,不仅仅是学习C语言,还是其它的语言,以及其它的计算机方面的知识都要重在实践,所以后在学习过程中,我会更加注视实践操作,使自己更好地学好计算机这门课程。通过这次的C++语言程序设计实习,我对C++有了更加深刻的认识,学会了用结构体定义职工的个人信息,能够以文件的形式写入信息,同时也能从文件中读取信息,更进一步的了解了类的封装性,定义类和对链表的使用方法,也提高了我用C++语言编程的综合能力和实际操作能力,初步掌握简单软件的分析方法和设计方法。这个职工工资管理系统的各个函数之间也能够相互独立,同时也学会了运用流程图来分析函数,用它清晰地表示出了源代码。在这次课程设计中,我虽然了解到使用链表的优点,学会了分析问题,但是对有些知识的理解还不很深刻,编写出来的代码还不够精炼,更是深刻地感受到编写程序的困难。我希望在以后的学习中能有更多这样的实践操作,让我们在实际操作中不断提高我们的综合能力。现在回顾起来,也体会到了C++的魅力和智慧。这次C++课程设计通过两周的学习,发现了自己的很多不足,自己知识的很多漏洞,看到了自己的实践经验还是比较缺乏,理论联系实际的能力还急需提高。计算机有比人运算的快N倍,但也有出笨的地方。它是变幻莫测的,经过你的努力思考它一定会被控制的服服帖帖的就看你怎样来运用它。一定要记住理论知识与实践结合,不要书上的知识都知道然而叫你编一个程序实现怎样的效果,你却无法动手,那就是一个典型的书呆子。实践后,要考虑这样编写是不是最好的,还能不能做其它方法来做,在编写这个程序中遇到了什么样的错误,为什么会遇到,以后应该怎样避免。同时你也应该对现成的程序稍做修改然后在消化成为自己的东西。重庆科技学院《职工工资管理系统》课程设计报告165.2建议加强师生互动,加强实践。没有实践,就谈不上学会C++。这是大家都知道的道理,尽量多讲一些例子,让我们从中学习。这样,我们应用起来比较得心应手,对今后的学习也有非常大的作用。重庆科技学院《职工工资管理系统》课程设计报告176、答辩内容及分析1.系统的时间是怎样调用的?分析:首先用头文件#includectime,然后定义:time_tt;time(&t);实现如下:cout当前系统时间是:ctime(&t)。2.//==========================================以二进制方式输出文件voidOutFile(worker*p,ifstream*in)中的:p-Name=(char*)malloc(100);in-read((char*)&p-LenName,4);in-read(p-Name,p-LenName);p-Name[p-LenName]='\0';为什么要这样写?分析:首先