程序设计基础实践报告_第1页
程序设计基础实践报告_第2页
程序设计基础实践报告_第3页
程序设计基础实践报告_第4页
程序设计基础实践报告_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、福建师范大学闽南科技学院程序设计基础实践报告题目职工工资信息管理系统陈显泽学生姓名学院信息科学与工程学院土木工程 1班2017.4.20专业班级完成时间指导教师褚若波计算机程序设计实践目 录.二、课程设计基本内容.三、程序功能简介.四、主体内容.4.1 设计分析.4.2 程序结构.4.3 模块的功能及程序说明.4.4 相关模块源程序.4.5 操作方法(流程).4.6 试验结果(包括输入数据和输出结果).4.7 设计体会.4.8 参考文献.五、用户使用说明.六、对本设计过程及方法、手段的改进建议.计算机程序设计实践一、课程设计的目的和要求C+节,其主要目的在于通过综合程序课程设计,培养和提高学生

2、的独立分析问题、解决实际问题的能力和计算机语言编程能力。本次课程设计时间为2周,要求每位同学在为期两周的时间段内,在编程环境下,用面向对象程序设计思想进行C+程序设计、功能模块调试,在正确、合计题所规定的任务、进行课程设计报告编写与整理。而且也是为了培养从资料文献、科学实验中获得知识的能力,提高从别人经的深度、运用理论去处理问题的能力、实验能力、课程设计能力、书面及口头表达能力进行考核。课程设计结束时,要求进行设计成果演示(由指导老师验收相关程序运行成二、课程设计的内容设计一个职工信息管理案例,实现不同类别职工的工资数据。职工的种类包括:正式职工和临时工。定义一个基本的职工类,基本信息包括:编

3、号、姓名、性别、年龄、家庭住址、基本职务工资。派生出正式职工类,增加的属性包括:岗位津贴、养老金、住房公积金、所得税、医疗保险、实发工资;临时工增加的属性包括:奖金、所得税、实发工资。1.正式职工:实发工资=基本职务工资+岗位津贴-养老金-住房公积金-所得税-医疗保险;2.临时工:实发工资=基本职务工资+奖金-所得税;基本功能与技术要求1、2、计算与统计功能:采用静态数据成员与成员函数完成记录中相关数据的统计;1)能够打开已存在的数据表文件,对数据表中与某关键字匹配的相关记录进行数据统计(包括:工资总额、平均值)第 1 页计算机程序设计实践2)计算每个职工的实发工资。3、记录管理功能:利用继承

4、与派生思想创建不同的类;记录的管理采用链表或者指针数组实现;采用抽象类、虚函数等实现对象与函数的动态关联,体现多态性。1/插入记录:完成对任意一条记录输入、添加或插入数据表中,并保存到数据文件中。2)查询、显示记录:能够打开已存在的数据表文件,根据用户要求按所给个对象的信息。3)修改记录:能够打开已存在的数据表文件,并对确定的任意记录进行修改,在修改过程中,应显示记录信息,给出确认提示,并对更新的记录信息进行文件保存。4)删除记录:能够打开已存在的数据表文件,可以删除数据表中的任一记录,要求具备逻辑删除(具有恢复功能)和物理删除功能,并对新的数据表信息进行文件保存。三、程序功能简介数据文件管理

5、功能:利用输入输出流创建新文件、打开文件、保存文件。计算与统计功能:用静态数据成员与成员函数完成记录中相关数据的统计;记录管理功能:实现输入,插入,删除,恢复等功能。四、主体内容4.1 设计分析设置基本类staff,并由此派生出正式职工类formal和临时工类casual.由于象与函数的动态关联。在 整 个 程 序 中 定 义 了 三 个 函 数 string InputNormalInfo(istream&input,string tip,chartype);(用于直到输入正确类型的数据才返回)voidSaveToFile(fstream &file,staff *s);(用于保存信息到指定

6、文件)voidReadFromFile(fstream &file,staff *s);( 用 于 从 文 件 读 取 信 息 第 2 页计算机程序设计实践InputNormalInfo 函数用于对测试过程中一些由输入错误引起的错误的纠正。最后在主函数中用 SWITCH 语句实现了对文件,信息的相关操作。为了体现C+工程性的特点,本程序中的类,函数单独作为头文件和 CPP 文件,最后在主程序中调用即可。即为了实现面向对象中的公用借口与私有实现的分离。4.2 程序结构职工信息统计关键字模块职工信息输入模块第 3 页计算机程序设计实践4.3 各模块的功能及程序说明a.函数模块(作为三个头文件)st

7、ring InputNormalInfo(istream &input,string tip, char type);用于直序的可行性。void SaveToFile(fstream &file,staff *s);用于保存信息到指定文件。此函数执行对职工数据的保存。void ReadFromFile(fstream &file,staff *s);用于从文件读取信息。b.主函数模块(作为最终的主程序)创建主菜单界面,以供用户选择。用 SWITCH语句和链表实现相关操作。职工信息文件模块:case 1:(新建)case 2:(打开)case 3:(保存)case 4:(另存为)职工信息输入模块

8、:case 5:(输入信息)职工信息插入模块:case 6:(插入信息)职工信息显示模块:case 7:(显示信息)职工信息查询模块: case 8:(查询信息)职工信息统计关键字模块: case 9:(统计关键字(工资总额,平均值))职工信息删除模块: case a:(删除信息)职工信息恢复模块:case b:(恢复信息)退出系统模块:case q:(退出程序)c.类模块(每个类作为一个头文件,类的函数作为 cpp文件)staff 基本职工类:class staff定义了职工的基本信息,数据包括编号,姓名,年龄等。设置输入输出重载友元函数,计算工资的虚函数。formal正式职工类:class

9、 formal:public class staff增加正式职工的其他数据,比如保险之类的。明确定义计算工资函数casual临时工类:class casual:public class staff增加临时工的附加信息。明确定义计算工资函数。第 4 页计算机程序设计实践4.4 相关模块源程序a.函数模块InputNormalInfo函数 cpp文件源程序#includestaff.h#includeformal.h#includecasual.hstring InputNormalInfo(istream &input, string tip, char type) /用于直到输入正确类型的数据

10、才返回string str; /临时变量while (1)bool wrong = false; /记录是否输入错误cout tip;if (INT = type)cout (请输入整数);else if (DECIMAL = type)cout (请输入小数或整数);cout.put(:);getline(input, str);if (INT = type) /整数for (auto iter = str.cbegin(); iter != str.cend(); iter+)/使用迭代器检查是否输入的都是整数if (!isdigit(*iter) /不是数字wrong = true;br

11、eak;第 5 页计算机程序设计实践else if (DECIMAL = type) /小数bool point = false; /记录是否已经读取到小数点for (auto iter = str.cbegin(); iter != str.cend(); iter+)/使用迭代器检查是否输入的是小数if (!isdigit(*iter) /不是数字if (. = *iter & !point) /第一次读取到小数点point = true; /已经读取小数点continue;/否则输入错误wrong = true;break;/判断输入是否错误if (!wrong)return str;S

12、aveToFile函数 cpp文件源程序#includestaff.h第 6 页计算机程序设计实践#includeformal.h#includecasual.hvoid SaveToFile(fstream &file, staff *s) /用于保存信息到指定文件if (&file = &cout)staff *p = s;while (p)cout *p next;elsefstream temp;temp.open(path, ios:out);staff *p = s;while (p)temp *p next;temp.close();ReadFromFile函数 cpp文件源程序

13、#includestaff.h#includeformal.h第 7 页计算机程序设计实践#includecasual.hvoid ReadFromFile(fstream &file, staff *s) /用于从文件读取信息file.seekg(0, ios:beg);if (*s)/如果已有信息delete *s;*s = NULL;string input;staff *p = NULL;staff *tail = NULL; /记录链表尾部/记录读取到的一行do/读取标题getline(file, input);if (-正式工- = input)p = new formal;els

14、e if (-临时工- = input)p = new casual;elsecontinue;file *p;/清除多余的信息if (!*s) /第一次读入tail = *s = p;elsetail = tail-next = p; while (file.good();file.clear();第 8 页计算机程序设计实践b.主函数模块 cpp文件源程序/ 职工工资信息系统.cpp : 定义控制台应用程序的入口点。#include stdafx.h#include #include #include #includeformal.h#includestaff.h#includecasua

15、l.hfstream file; /文件流string path; /路径,记录打开的文件路径string input; /记录输入staff *head = NULL; /头指针staff *recover = NULL; /记录可恢复信息int main(int argc, char *argv, char *envp)system(color 1A);while (1)system(cls);if (file.is_open()/已打开文件cout 当前打开文件: path endl;cout 新建n2-打开n3-保存n第 9 页计算机程序设计实践4-另存为n5-输入信息n6-插入信息n

16、7-显示信息n8-查询信息n9-统计关键字(工资总额,平均值)na-删除信息nb-恢复信息nq-退出n;getline(cin, input);system(cls);switch (input0)case 1: /新建/询问是否保存已打开的文件if (file.is_open()cout path endl;cout 是否保存当前已打开的文件?(Y/N):;getline(cin, input);if (Y = input0 | y = input0)SaveToFile(file, head);cout 保存成功. endl;elsecout 保存失败. endl;第 10 页计算机程序设

17、计实践file.close();cout 请输入新文件路经:;getline(cin, input);/打开文件file.open(input, ios:in);if (file) /文件已存在file.close(); /先关闭文件cout 文件已存在,是否替换?(Y/N):;string temp = input; /临时保存文件路径getline(cin, input);if (!(Y = input0 | y = input0)/取消新建cout 新建失败. endl;break;elsecout 已替换. endl;input = temp;if (head) /释放内存delete

18、 head;head = NULL;path = input;file.open(path, ios:in | ios:out | ios:trunc);第 11 页计算机程序设计实践break;case 2: /打开cout 请输入要打开的文件路径:;getline(cin, input);if (input = path) /已打开cout 已打开该文件! endl;break;/是否存在文件fstream temp;temp.open(input, ios:in);if (!temp)cout 文件不存在,打开失败! endl;break;temp.close();/询问是否保存if (

19、file.is_open()cout 是否保存文件: path n;path = input;cout (Y/N):;getline(cin, input);if (y = input0 | Y = input0)第 12 页计算机程序设计实践SaveToFile(file, head);cout 保存成功. endl;elsecout 未保存. endl;file.close();elsepath = input;file.open(path, ios:in | ios:out | ios:app);ReadFromFile(file, &head);cout 已读入信息:n;SaveToF

20、ile(fstream &)cout, head);break;case 3: /保存if (!file.is_open() /未打开文件cout 当前未打开文件! endl;elseSaveToFile(file, head);cout 已保存到: path endl;break;第 13 页计算机程序设计实践case 4: /另存为cout 请输入另存为的文件路径:;getline(cin, input);fstream temp;string _path = input;/临时路径temp.open(_path, ios:in);if (temp) /文件已存在cout 文件已存在,是否

21、替换?(Y/N):;getline(cin, input);if (!(Y = input0 | y = input0)/输 入 的不是 Y/y则取消另存为cout 取消另存. endl;break;/另存到_pathstring str = path; /保存 pathpath = _path;SaveToFile(temp, head);cout 文件已另存到 _path next) s = s-next;while (1)staff *p; /临时变量cout *p;if (!head)s = head = p;elses = s-next = p;break;case 6: /插入信息

22、if (!head)cout 当前无信息,无法插入! endl;else第 15 页计算机程序设计实践SaveToFile(fstream &)cout, head);cout GetNO() != no)if (!s-next) /不存在指定编号cout 编号输入错误! next;if (flag) break; /编号输入错误则退出while (1)staff *p; /临时变量cout *p;p-next = s-next;s-next = p;s = p;break;case 7: /显示信息if (head)SaveToFile(fstream &)cout, head);elsec

23、out 当前未打开文件! endl;break;case 8: /查询信息if (!head)cout 当前无信息,终止查询! endl;elseSaveToFile(fstream &)cout, head);cout 请输入要查询的内容:;getline(cin, input);staff *s = head;cout n查询结果:n;第 17 页计算机程序设计实践coutnext; /临时保存s-next = NULL;SaveToFile(fstream &)cout, s);s-next = p; /还原if (!s-next)break;elses = s-next;break;c

24、ase 9:/统计关键字(工资总额,平均值)if (!head)/无信息可统计cout 当前未输入信息! GetMoney();s = s-next; while (s);cout 工资总额: money endl;cout 平均值: money / population endl;break;case a: /删除信息if (!head)/无信息可删除cout 当前未输入信息! endl;break;char choice = 0; /记录选择cout A(逻辑删除,可恢复)/B(物理删除,不可恢复):;getline(cin, input);if (A = input0 | a = inp

25、ut0)choice = A;else if (B = input0 | b = input0)choice = B;elsecout 输入错误! endl;break;第 19 页计算机程序设计实践while (1)system(cls);if (A = choice)cout 以下删除可恢复:;else if (B = choice)cout 以下删除不可恢复:;system(pause);/显示信息SaveToFile(fstream &)cout, head);cout GetNO() = no)/第一条信息符合if (A = choice) /逻辑删除,先保存if (p)p-next

26、 = head;elserecover = head;head = head-next;if (A = choice)if (p)第 20 页计算机程序设计实践p-next-next = NULL;elserecover-next = NULL;else/符合的信息不是第一条staff *s = head; /定位要删除的信息之前的一条while (s-next & s-next-GetNO() != no)s = s-next;if (!s-next) /未找到匹配编号cout next = s-next;elserecover = s-next;s-next = s-next-next;i

27、f (A = choice)if (p)p-next-next = NULL;第 21 页计算机程序设计实践elserecover-next = NULL;break;case b: /恢复信息if (!recover)cout 无可恢复信息! endl;break;SaveToFile(fstream &)cout, recover);cout next)第 22 页计算机程序设计实践s = s-next;s-next = recover;recover = NULL;cout 已恢复! endl;elsecout 未恢复! endl;break;case q:if (head | reco

28、ver)cout 还有残留信息,确认退出?(Y/N):;getline(cin, input);if (Y = input0 | y = input0)return 0;elsecontinue;elsereturn 0;default:continue;system(pause);第 23 页计算机程序设计实践c.类模块(每个类的信息作为一个文件)基类 staff的.h文件和 cpp文件#include stdafx.h#include #include #include typedef char TYPE;#define STAFF 0#define FORMAL 1#define CAS

29、UAL 2#define INT 3/基本职工类/正式工/临时工/整数#define DECIMAL 4/小数#define MAX_IGNORE 256class staff /基本职工类(基类)protected:string no;/编号/姓名string name;string sex;unsigned age;/性别/年龄string address; /家庭住址double base_wage;/基本职务工资public:TYPE type;/职工类型(子类类别)staff *next; /链表指针protected:void InputBasicInfo(istream &inp

30、ut); /用于输入基类的基本信息void OutputBasicInfo(ostream &output);/用于输出基类的基本信息virtual void CalcMoney() = 0; /计算实发工资,并返回第 24 页计算机程序设计实践public:staff() :type(STAFF), next(NULL) /初始化staff() if (next) delete next; /删除链表friend istream &operator(istream &input, staff &s); /用 于 输入基类的基本信息并且调用子类的输入函数friend ostream &oper

31、ator(ostream &output, staff &s); /用 于 输出基类的基本信息并且调用子类的输出函数friend void ReadFromFile(fstream &file, staff *s); /用于从文件读取信息string GetNO() return no; virtual double GetMoney() = 0; /获取工资bool operator=(string str); /查询信息时用/获取编号#includestaff.h#includeformal.h#includecasual.hbool staff:operator=(string str)

32、/查询信息时用double data = atof(str.c_str();if (str = no)return true; /编号if (str = name) return true; /姓名if (str = sex) return true; /性别if (data = age) return true; /年龄if (str = address) return true; /家庭住址if (data = base_wage) return true;/基本职务工资if (FORMAL = type) /正式工return *(formal *)this = str;第 25 页计算

33、机程序设计实践else if (CASUAL = type)/临时工return *(casual *)this = str;return false;void staff:InputBasicInfo(istream &input)/用于输入基类的基本信息if (&input = &cin) /从键盘输入cout 编号:;cout 姓名:;cout 性别:;getline(input, no);getline(input, name);getline(input, sex);age = atoi(InputNormalInfo(input, 年龄, INT).c_str();cout age

34、;input.ignore(MAX_IGNORE, :);getline(input, no);getline(input, name);getline(input, sex);getline(input, address);input.ignore(MAX_IGNORE, :) base_wage;void staff:OutputBasicInfo(ostream &output) /用于输出基类的基本信第 26 页计算机程序设计实践息output 编号: no n;output 姓名: name n;output 性别: sex n;output 年龄: age n;output 家庭住

35、址: address n;output 基本职务工资: base_wage (istream &input, staff &s)/用于输入基类的基本信息并且调用子类的输入函数s.InputBasicInfo(input);if (FORMAL = s.type)/正式工input *(formal *)&s;else if (CASUAL = s.type) /临时工input *(casual *)&s;s.CalcMoney();return input;ostream &operator(ostream &output, staff &s) /用于输出基类的基本信息并且调用子类的输出函数

36、switch (s.type) /输出类型case FORMAL:output -正式工-n;break;第 27 页计算机程序设计实践case CASUAL:output -临时工-n;break;s.OutputBasicInfo(output);if (FORMAL = s.type)/正式工output *(formal *)&s;else if (CASUAL = s.type) /临时工output (istream &input, formal &f); /用 于 输入正式工的附加信息第 28 页计算机程序设计实践friend ostream &operator(istream

37、&input, formal &f) /用于输入正式工的附加信息if (&input = &cin) /从键盘输入f.salary = atof(InputNormalInfo(input, 岗 位 津 贴 ,DECIMAL).c_str();f.pension = atof(InputNormalInfo(input, 养 老 金 ,DECIMAL).c_str();f.housing_fund = atof(InputNormalInfo(input, 住房公积金,DECIMAL).c_str();第 29 页计算机程序设计实践f.income_tax = atof(InputNormal

38、Info(input, 所 得 税 ,DECIMAL).c_str();f.insurance = atof(InputNormalInfo(input, 医 疗 保 险 ,DECIMAL).c_str();else/从文件读入input.ignore(MAX_IGNORE, :) f.salary;input.ignore(MAX_IGNORE, :) f.pension;input.ignore(MAX_IGNORE, :) f.housing_fund;input.ignore(MAX_IGNORE, :) f.income_tax;input.ignore(MAX_IGNORE, :)

39、 f.insurance;input.ignore(MAX_IGNORE, :) f.money;return input;ostream &operator(ostream &output, formal &f) /用于输出正式工的附加信息output 岗位津贴: f.salary n;output 养老金: f.pension n;output 住房公积金: f.housing_fund n;output 所得税: f.income_tax n;output 医疗保险: f.insurance n;output 实发工资: f.money (istream &input, casual &

40、c);/用于输入临时工的附加信息friend ostream &operator(istream &input, casual &c)/用于输入临时工的附加信息第 31 页计算机程序设计实践if (&input = &cin) /从键盘输入c.award=atof(InputNormalInfo(input,奖金,DECIMAL).c_str();c.income_tax=atof(InputNormalInfo(input, 所 得 税 “ ,DECIMAL).c_str();else/从文件读入input.ignore(MAX_IGNORE, :) c.award;input.ignore

41、(MAX_IGNORE, :) c.income_tax;input.ignore(MAX_IGNORE, :) c.money;return input;ostream &operator(ostream &output, casual &c) /用于输出临时工的附加信息output 奖金: c.award n;output 所得税: c.income_tax n;output 实发工资: c.money n;return output;4.5 操作方法选择输入Switch(input01,2,3,4,5,6,7,8,9,a,b第 32 页计算机程序设计实践4.6 试验结果(包括输入数据和输出结果)开始运行程序,进入系统页面,按照使用说明进行操作图 1-1 系统操作的界面图 1-2 建立文件界面第 33 页计算机程序设计实践图 1-3 输入数据界面图 1-4 显示信息界面第 34 页计算机程序设计实践图 1-5 统计关键字界面图 1-6 查询信息界面,可按定义所以数据之一查询,这里给出按编号查询第 35 页计算机程序设计实践图 1-7 删除界面,有逻

温馨提示

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

评论

0/150

提交评论