程序设计基础实践报告doc.docx
- 文档编号:9885876
- 上传时间:2023-02-07
- 格式:DOCX
- 页数:45
- 大小:269.22KB
程序设计基础实践报告doc.docx
《程序设计基础实践报告doc.docx》由会员分享,可在线阅读,更多相关《程序设计基础实践报告doc.docx(45页珍藏版)》请在冰豆网上搜索。
程序设计基础实践报告doc
福建师范大学闽南科技学院
程序设计基础实践报告
题目职工工资信息管理系统
学生姓名陈显泽
学院信息科学与工程学院
专业班级土木工程1班
完成时间2017.4.20
指导教师褚若波
二、课程设计基本内容....................................
四、主体内容............................................
4.1设计分析......................................
4.2程序结构......................................
4.3模块的功能及程序说明..........................
4.4相关模块源程序................................
4.5操作方法(流程)................................
4.6试验结果(包括输入数据和输出结果).............
4.7设计体会......................................
4.8参考文献......................................
六、对本设计过程及方法、手段的改进建议..................
1、课程设计的目的和要求
本次课程设计,是基于“面向对象编程(C++)”课程学习内容的重要实践环节,其主要目的在于通过综合程序课程设计,培养和提高学生的独立分析问题、解决实际问题的能力和计算机语言编程能力。
本次课程设计时间为2周,要求每位同学在为期两周的时间段内,在编程环境下,用面向对象程序设计思想进行C++程序设计、功能模块调试,在正确、合理的软件功能规划的基础上,实现公用接口与私有实现的分离,独立完成相关设计题所规定的任务、进行课程设计报告编写与整理。
而且也是为了培养从资料文献、科学实验中获得知识的能力,提高从别人经验中找到解决问题的新途径的悟性,初步培养工程意识和创新能力。
对掌握知识的深度、运用理论去处理问题的能力、实验能力、课程设计能力、书面及口头表达能力进行考核。
课程设计结束时,要求进行设计成果演示(由指导老师验收相关程序运行成果并打分);每人须对相关电子文档进行整理上交(包括:
程序文件、帮助说明文档);交课程设计报告一份(纸质打印稿)。
二、课程设计的内容
设计一个职工信息管理案例,实现不同类别职工的工资数据。
职工的种类包括:
正式职工和临时工。
定义一个基本的职工类,基本信息包括:
编号、姓名、性别、年龄、家庭住址、基本职务工资。
派生出正式职工类,增加的属性包括:
岗位津贴、养老金、住房公积金、所得税、医疗保险、实发工资;临时工增加的属性包括:
奖金、所得税、实发工资。
1.正式职工:
实发工资=基本职务工资+岗位津贴-养老金-住房公积金-所得税-医疗保险;
2.临时工:
实发工资=基本职务工资+奖金-所得税;
基本功能与技术要求
1、数据文件管理功能:
利用输入输出流创建新文件、打开文件、保存文件。
2、计算与统计功能:
采用静态数据成员与成员函数完成记录中相关数据的统计;
1)能够打开已存在的数据表文件,对数据表中与某关键字匹配的相关记录进行数据统计(包括:
工资总额、平均值)
2)计算每个职工的实发工资。
3、记录管理功能:
利用继承与派生思想创建不同的类;记录的管理采用链表或者指针数组实现;采用抽象类、虚函数等实现对象与函数的动态关联,体现多态性。
1)输入/添加/插入记录:
利用重载运算符“>>”完成对任意一条记录输入、添加或插入数据表中,并保存到数据文件中。
2)查询、显示记录:
能够打开已存在的数据表文件,根据用户要求按所给记录关键字查询一个或多个相关联记录的各项信息。
利用重载运算符“<<”输出个对象的信息。
3)修改记录:
能够打开已存在的数据表文件,并对确定的任意记录进行修改,在修改过程中,应显示记录信息,给出确认提示,并对更新的记录信息进行文件保存。
4)删除记录:
能够打开已存在的数据表文件,可以删除数据表中的任一记录,要求具备逻辑删除(具有恢复功能)和物理删除功能,并对新的数据表信息进行文件保存。
数据文件管理功能:
利用输入输出流创建新文件、打开文件、保存文件。
计算与统计功能:
用静态数据成员与成员函数完成记录中相关数据的统计;
记录管理功能:
实现输入,插入,删除,恢复等功能。
四、主体内容
4.1设计分析
设置基本类staff,并由此派生出正式职工类formal和临时工类casual.由于在派生类中都要用到同名的同功能函数,所以在基类中定义了虚函数,以实现对象与函数的动态关联。
在整个程序中定义了三个函数stringInputNormalInfo(istream&input,stringtip,chartype);(用于直到输入正确类型的数据才返回)voidSaveToFile(fstream&file,staff*s);(用于保存信息到指定文件)voidReadFromFile(fstream&file,staff**s);(用于从文件读取信息),InputNormalInfo函数用于对测试过程中一些由输入错误引起的错误的纠正。
最后在主函数中用SWITCH语句实现了对文件,信息的相关操作。
为了体现C++工程性的特点,本程序中的类,函数单独作为头文件和CPP文件,最后在主程序中调用即可。
即为了实现面向对象中的公用借口与私有实现的分离。
4.2程序结构
4.3各模块的功能及程序说明
a.函数模块(作为三个头文件)
①stringInputNormalInfo(istream&input,stringtip,chartype);用于直到输入正确类型的数据才返回。
执行过程中用户可能会由于不小心输入错误,而是系统终止运行,系统就会出错。
用这个函数检查用户的输入是否正确,提高程序的可行性。
②voidSaveToFile(fstream&file,staff*s);用于保存信息到指定文件。
此函数执行对职工数据的保存。
③voidReadFromFile(fstream&file,staff**s);用于从文件读取信息。
b.主函数模块(作为最终的主程序)
创建主菜单界面,以供用户选择。
用SWITCH语句和链表实现相关操作。
①职工信息文件模块:
case'1':
(新建)
case'2':
(打开)
case'3':
(保存)
case'4':
(另存为)
②职工信息输入模块:
case'5':
(输入信息)
③职工信息插入模块:
case'6':
(插入信息)
④职工信息显示模块:
case'7':
(显示信息)
⑤职工信息查询模块:
case'8':
(查询信息)
⑥职工信息统计关键字模块:
case'9':
(统计关键字(工资总额,平均值))
⑦职工信息删除模块:
case'a':
(删除信息)
⑧职工信息恢复模块:
case'b':
(恢复信息)
⑨退出系统模块:
case'q':
(退出程序)
c.类模块(每个类作为一个头文件,类的函数作为cpp文件)
①staff基本职工类:
classstaff{}定义了职工的基本信息,数据包括编号,姓名,年龄等。
设置输入输出重载友元函数,计算工资的虚函数。
②formal正式职工类:
classformal:
publicclassstaff{}增加正式职工的其他数据,比如保险之类的。
明确定义计算工资函数
③casual临时工类:
classcasual:
publicclassstaff{}增加临时工的附加信息。
明确定义计算工资函数。
4.4相关模块源程序
a.函数模块
①InputNormalInfo函数cpp文件源程序
#include"staff.h"
#include"formal.h"
#include"casual.h"
stringInputNormalInfo(istream&input,stringtip,chartype)//用于直到输入正确类型的数据才返回
{
stringstr;//临时变量
while
(1)
{
boolwrong=false;//记录是否输入错误
cout< if(INT==type) cout<<"(请输入整数)"; elseif(DECIMAL==type) cout<<"(请输入小数或整数)"; cout.put(': '); getline(input,str); if(INT==type)//整数 { for(autoiter=str.cbegin();iter! =str.cend();iter++)//使用迭代器检查是否输入的都是整数 { if(! isdigit(*iter))//不是数字 { wrong=true; break; } } } elseif(DECIMAL==type)//小数 { boolpoint=false;//记录是否已经读取到小数点 for(autoiter=str.cbegin();iter! =str.cend();iter++)//使用迭代器检查是否输入的是小数 { if(! isdigit(*iter))//不是数字 { if('.'==*iter&&! point)//第一次读取到小数点 { point=true;//已经读取小数点 continue; } //否则输入错误 wrong=true; break; } } } //判断输入是否错误 if(! wrong) returnstr; } } ②SaveToFile函数cpp文件源程序 #include"staff.h" #include"formal.h" #include"casual.h" voidSaveToFile(fstream&file,staff*s)//用于保存信息到指定文件 { if(&file==&cout) { staff*p=s; while(p) { cout<<*p<<'\n'; p=p->next; } } else { fstreamtemp; temp.open(path,ios: : out); staff*p=s; while(p) { temp<<*p<<'\n'; p=p->next; } temp.close(); } } ③ReadFromFile函数cpp文件源程序 #include"staff.h" #include"formal.h" #include"casual.h" voidReadFromFile(fstream&file,staff**s)//用于从文件读取信息 { file.seekg(0,ios: : beg); if(*s)//如果已有信息 { delete*s; *s=NULL; } stringinput;//记录读取到的一行 staff*p=NULL; staff*tail=NULL;//记录链表尾部 do//读取标题 { getline(file,input); if("-正式工-"==input) p=newformal; elseif("-临时工-"==input) p=newcasual; else continue; file>>*p; //清除多余的信息 if(! *s)//第一次读入 tail=*s=p; else tail=tail->next=p; }while(file.good()); file.clear(); } b.主函数模块cpp文件源程序 //职工工资信息系统.cpp: 定义控制台应用程序的入口点。 #include"stdafx.h" #include #include #include #include"formal.h" #include"staff.h" #include"casual.h" fstreamfile;//文件流 stringpath;//路径,记录打开的文件路径 stringinput;//记录输入 staff*head=NULL;//头指针 staff*recover=NULL;//记录可恢复信息 intmain(intargc,char*argv[],char*envp[]) { system("color1A"); while (1) { system("cls"); if(file.is_open())//已打开文件 { cout<<"当前打开文件: "< } cout<<"1->新建\n" "2->打开\n" "3->保存\n" "4->另存为\n" "5->输入信息\n" "6->插入信息\n" "7->显示信息\n" "8->查询信息\n" "9->统计关键字(工资总额,平均值)\n" "a->删除信息\n" "b->恢复信息\n" "q->退出\n"; getline(cin,input); system("cls"); switch(input[0]) { case'1': //新建 { //询问是否保存已打开的文件 if(file.is_open()) { cout< cout<<"是否保存当前已打开的文件? (Y/N): "; getline(cin,input); if('Y'==input[0]||'y'==input[0]) { SaveToFile(file,head); cout<<"保存成功......"< } else cout<<"保存失败......"< file.close(); } cout<<"请输入新文件路经: "; getline(cin,input); //打开文件 file.open(input,ios: : in); if(file)//文件已存在 { file.close();//先关闭文件 cout<<"文件已存在,是否替换? (Y/N): "; stringtemp=input;//临时保存文件路径 getline(cin,input); if(! ('Y'==input[0]||'y'==input[0]))//取消新建 { cout<<"新建失败......"< break; } else cout<<"已替换......"< input=temp; } if(head)//释放内存 { deletehead; head=NULL; } path=input; file.open(path,ios: : in|ios: : out|ios: : trunc); break; } case'2': //打开 { cout<<"请输入要打开的文件路径: "; getline(cin,input); if(input==path)//已打开 { cout<<"已打开该文件! "< break; } //是否存在文件 fstreamtemp; temp.open(input,ios: : in); if(! temp) { cout<<"文件不存在,打开失败! "< break; } temp.close(); //询问是否保存 if(file.is_open()) { cout<<"是否保存文件: "< path=input; cout<<"(Y/N): "; getline(cin,input); if('y'==input[0]||'Y'==input[0]) { SaveToFile(file,head); cout<<"保存成功......"< } else cout<<"未保存......"< file.close(); } else path=input; file.open(path,ios: : in|ios: : out|ios: : app); ReadFromFile(file,&head); cout<<"已读入信息: \n"; SaveToFile((fstream&)cout,head); break; } case'3': //保存 { if(! file.is_open())//未打开文件 { cout<<"当前未打开文件! "< } else { SaveToFile(file,head); cout<<"已保存到: "< } break; } case'4': //另存为 { cout<<"请输入另存为的文件路径: "; getline(cin,input); fstreamtemp; string_path=input;//临时路径 temp.open(_path,ios: : in); if(temp)//文件已存在 { cout<<"文件已存在,是否替换? (Y/N): "; getline(cin,input); if(! ('Y'==input[0]||'y'==input[0]))//输入的不是Y/y则取消另存为 { cout<<"取消另存......"< break; } } //另存到_path stringstr=path;//保存path path=_path; SaveToFile(temp,head); cout<<"文件已另存到"<<_path< path=str; break; } case'5': //输入信息 { staff*s=head; if(s)//取得链表尾部 while(s->next)s=s->next; while (1) { staff*p;//临时变量 cout<<"f(正式工)/c(临时工)/q(退出)\n"; getline(cin,input); if('f'==input[0]||'F'==input[0]) p=newformal; elseif('c'==input[0]||'C'==input[0]) p=newcasual; elseif('q'==input[0]||'Q'==input[0]) break; else continue; cin>>*p; if(! head) s=head=p; else s=s->next=p; } break; } case'6': //插入信息 { if(! head) cout<<"当前无信息,无法插入! "< else { SaveToFile((fstream&)cout,head); cout<<"插入到多少编号的后面: "; getline(cin,input); stringno=input; staff*s=head;//定位编号位置 boolflag=false;//编号输入是否错误 while(s->GetNO()! =no) { if(! s->next)//不存在指定编号 { cout<<"编号输入错误! "< flag=true; break; } s=s->next; } if(flag)break;//编号输入错误则退出 while (1) { staff*p;//临时变量 cout<<"f(正式工)/c(临时工)/q(退出)\n"; getline(cin,input); if('f'==input[0]||'F'==input[0]) p=newformal; elseif('c'==input[0]||'C'
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计 基础 实践 报告 doc