




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
青岛理工大学C++面向对象课程设计报告院(系: 计算机工程学院 专业: 软件工程 学生姓名: *** 班级 **** 学号:201307*** 题目: 高校水电费管理系统设计 起迄日期:_2015.6.29~2015.7.10 设计地点: 计算机学院机房 指 导 教 师: 翟正利 丁凡 完成日期: 2015年7月 10日《C++面向对象课程设计》任务书题目9“高校水电费管理系统设计”1、问题描述住宿学生信息包括:学号、姓名、性别、年龄、班级、用电量、用水量等信息。教工信息包括职工号、姓名、性别、年龄、工作部门、用电量、用水量等信息。能计算出学生和教工每月所要交的电费和水费。定义一个人员类,实现学生和教工共同的信息和行为。2、功能要求(1)添加功能:程序能够添加不同学生和教工的记录,提供选择界面供用户选择所要添加的类别,要求编号号要唯一,如果添加了重复编号的记录时,则提示数据添加重复并取消添加。(2)查询功能:可根据姓名、用水量、用电量信息对已添加的学生或教工记录进行查询,如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息。(3)显示功能:可显示当前系统中所有学生和教工的记录,每条记录占据一行。(4)编辑功能:可根据查询结果对相应的记录进行修改,修改时注意编号的唯一性。(5)删除功能:主要实现对已添加的学生或教工记录进行删除。如果当前系统中没有相应的记录,则提示“记录为空并返回操作。(6)统计功能:能根据多种参数进行统计。能统计学生和教工的用水用电量、所要交纳的电费和水费、未交纳水电费的人员信息等。(7)保存功能:可将当前系统中各类记录存入文件中,存入方式任意。(8)读取功能:可将保存在文件中的信息读入到当前系统中,供用户进行使用。(9)计算电费和水费。学生每月都有一定额度的水电是免费使用的,超过的部分需要交费。3、问题的解决方案根据系统功能要求,可以将问题解决分为以下步骤:(1)应用系统分析,建立该系统的功能模块框图以及界面的组织和设计;(2)分析系统中的各个实体及它们之间的关系;(3)根据问题描述,设计系统的类层次;(4)完成类层次中各个类的描述;(5)完成类中各个成员函数的定义;(6)完成系统的应用模块;(7)功能调试;(8)完成系统总结报告。目录一、需求分析 11.1选做此课题或项的目的 11.2程序所实现功能 1二、内容设计 12.1模块图 12.2流程图 22.3关键代码 9三、调试分析 173.1实际完成情况的说明 173.2程序的性能分析 173.3上机过程中出现的问题及其解决方案 173.4程序中可以改进的地方说明 183.5程序中可以扩充的功能及设计实现构想 18四、用户手册 16五、设计总结 30六、参考文献 31七、附录 31课程设计报告内容一、需求分析1.选做此课题或项的目的此课题为高校水电费管理系统选做此课题是想对自己这学期的C+学到的知识进行一次全面的练习,一方面用实践巩固已掌握的知识点,另一方面也能从中发现自己的不足。此课题是设计一个系统实现对学生和教工信息的添加、查询、显示、编辑、删除、保存和读取功能。其中包括三个类:Preson、Studet和Teacher的设计,还有功能函数的编写。由于考虑到数组的溢出问题,所以我选择了使用链表,而对于指针,我一直觉得自己掌握的不是太熟练,所以通过此次课程设计,也让我更加熟悉了指针的应用,这对我来说是此次课程设计的很大收获。2.程序所实现的功能(1)添加功能:程序能够添加不同学生和教工的记录,提供选择界面供用户选择所要添加的类别,要求编号号要唯一,如果添加了重复编号的记录时,则提示数据添加重复并取消添加。(2)查询功能:可根据姓名、用水量、用电量信息对已添加的学生或教工记录进行查询,如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息。(3)显示功能:可显示当前系统中所有学生和教工的记录,每条记录占据一行。(4)编辑功能:可根据查询结果对相应的记录进行修改,修改时注意编号的唯一性。(5)删除功能:主要实现对已添加的学生或教工记录进行删除。如果当前系统中没有相应的记录,则提示“记录为空并返回操作。(6)统计功能:能根据多种参数进行统计。能统计学生和教工的用水用电量、所要交纳的电费和水费、未交纳水电费的人员信息等。(7)保存功能:可将当前系统中各类记录存入文件中,存入方式任意。(8)读取功能:可将保存在文件中的信息读入到当前系统中,供用户进行使用。(9)计算电费和水费。学生每月都有一定额度水电是免费使用的,超过的部分需要交费。功能模功能模块图:教工信息管理添加高高校水电费管理系统学生信息管理退出系统查显编删统保读退询示辑除计存取出图2.1功能模块12.画出主程序及其主要模块的流程图Person+no:int+name:string+age:int+water:double+power:double+watermoney:double+powermoney:double+realwatermoney:double+realpowermoney:double+Person(n=0,na="",s="",a=0,w=0.0,p=0.0,wm=0.0,pm=0.0)StudentStudent+Class:string+*next:Student+Student(n=0,Cl="",na="",s="",a=0,w=0.0,p=0.0,wm=0.0,pm=0.0)+disp()+append(Student*p,Student*q)+find(Student*p)+show(Student*p)+voidedit(Student*p)+del(Student*p)+count(Student*p)+save(Student*p)+read(Student*q)Teacher+part:string+*next:Student+Teacher(n=0,Cl="",na="",s="",a=0,w=0.0,p=0.0,wm=0.0,pm=0.0)+disp()+append(Teacher*p,Teacher*q)+find(Teacher*p)+show(Teacher*p)+voidedit(Teacher*p)+del(Teacher*p)+count(Teacher*p)+save(Teacher*p)+read(Teacher*q)图2.2类图2开始break;break;while(choice)YNcin>>choicechoice=1choice=2choice=0defaultstudent_menu();break;teacher_menu();break;break;欢迎下次使用!intchoice=1结束图2.3主函数main()流程图3开始intintn=1dedel();break;count();break;Ywhile(n)Ycin>>nn=1append();find();show();edit();break;break;break;break;退出管理系统head1->read(head1)save()break;read();break;break;结束图2.4Student_menu()函数流程图((Teacher_menu())与其相同)4开始NNp->nextYYp->no==q->noNp=p->nextp?YN添加重复pre=p;p=p->next;p->no<q->nop=NULLNpre=pp=pre->nextpre->next=q;q->next=p;pre->next=q;q->next=p;结束图2.5添加功能5开始p=p->nexp=p->next;ccin>>choicechoice=1choice=2choice=3default按用水量查找break;按用电量查找break;按姓名查找break;break;结束图2.6查询功能!pNY!pNYpNY记录为空!p->disp();p=p->next;p=p->nexp=p->next结束图2.7显示功能6开始编号编号np=p->nextYYp=p->nextNp&&p->no!=nN!pY输入修改后的信息p->disp()结束图2.8编辑功能开始编号编号npre=p;pre=p;p=p->next;YYN!pNwhile(p)YY记录为空p->no==nNpre->next=p->next;pre=p;p=p->next;结束图2.9删除功能7开始cin>>choicecin>>choicechoice=1choice=2choice=3defaultp=p->next统计未缴纳水统计未缴纳水费人员break;统计电费水费break;break;统计用水用电量break;图2.10统计功能开始NNYout.close()!outNYP?保存失败输出信息到文件结束p=p->next;ofstreamout("Student.txt");p=p->next图2.11保存功能8Yin.close()q->nexYin.close()q->next=p;p->next=NULL;q=p;!inN读取信息不空YN文件读取失败ifstreamin("Student.txt");结束3.编写程序关键代码
图2.12读取功能添加功能代码:voidStudent::append(Student*p,Student*q)/添加记录{Student *pre=p;while(p->next){p=p->next;if(p->no==q->no) /判断所添加记录是否重复{cout<<"记录重复,添加失败!"<<endl;return;}}p=pre;p=p->next;while(p){if(q->no<p->no) /按编号递增的顺序添加记录{pre->next=q;q->next=p;break;}pre=p;9p=p->next;}if(p==NULL){pre->next=q;q->next=p;}cout<<"该学生记录添加成功!"<<endl;/保存到链表中,并未写入文件}查找功能代码:voidStudent::find(Student*p)/查找记录,p为头指针{intflag=0;p=p->next;intchoice;strings;doublew;doublepo;cout<<"输入选择查询依据:1按姓名查询 2按用水量查询 3按用电量查询 :";cin>>choice;cout<<"-----------------------------------------------------------------------------"<<endl;cout<<"编号"<<'\t'<<"班级"<<'\t'<<"姓名"<<'\t'<<"性别"<<'\t'<<"年龄"<<'\t'<<"用水量"<<'\t'<<"交水费"<<'\t'<<"用电量"<<'\t'<<"交电费"<<endl<<endl;switch(choice){case1:cout<<"输入要查询的姓名 :";cin>>s;/按姓名查找while(p!=NULL){if(p->name==s){ p->disp();/将所有符合的记录输出flag=1;}p=p->next;}if(!flag){cout<<"没有找到该记录!"<<endl;return;}cout<<"-----------------------------------------------------------------------------"<<endl;break;case2:cout<<"输入查询的用水量 :";cin>>w;/按用水量查询while(p!=NULL){10if(p->water==w){ p->disp();/将所有符合的记录输出flag=1;}p=p->next;}if(!flag){cout<<"没有找到该记录!"<<endl;return;}cout<<"-----------------------------------------------------------------------------"<<endl;break;case3:cout<<"输入查询的用电量 :";cin>>po;/按用电量查询while(p!=NULL){if(p->power==po){ p->disp();/将所有符合的记录输出flag=1;}p=p->next;}if(!flag){cout<<"没有找到该记录!"<<endl;return;}cout<<"-----------------------------------------------------------------------------"<<endl;break;default:cout<<"无此项,输入错误!"<<endl;break;}}显示功能代码:voidStudent::show(Student*p) /显示所有的学生记录{p=p->next;if(!p){cout<<"记录为空!"<<endl;return;}cout<<"----------------------------------------------------------------------------"<<endl;cout<<"编号"<<'\t'<<"班级"<<'\t'<<"姓名"<<'\t'<<"性别"<<'\t'<<"年龄"<<'\t'<<"用水量"<<'\t'<<"交水费"<<'\t'<<"用电量"<<'\t'<<"交电费"<<endl<<endl;11while(p){p->disp();p=p->next;}cout<<"----------------------------------------------------------------------------"<<endl;}编辑功能代码:voidStudent::edit(Student*p) /编辑某学生记录{stringna;strings;inta;stringCl;doublew,p1;intc1,c2,c3,c4,c5,c6,c7,c8;cout<<"输入要修改学生的编号 :";intn;cin>>n;p=p->next;while(p!=NULL&&p->no!=n){p=p->next;}if(p==NULL){cout<<"不存在该学生记录!"<<endl;return;}if(p->no==n){cout<<"是否修改班级(1:Yes 0:No) :";cin>>c1;if(c1==1){cout<<"输入班级:";cin>>Cl;p->Class=Cl;}cout<<"是否修改姓名(1:Yes 0:No) :";cin>>c2;if(c2==1){cout<<"输入姓名:";cin>>na;p->name=na;12}cout<<"是否修改性别(1:Yes 0:No) :";cin>>c3;if(c3==1){cout<<"输入性别:";cin>>s;p->sex=s;}cout<<"是否修改年龄(1:Yes 0:No) :";cin>>c6;if(c6==1){cout<<"输入年龄:";cin>>a;p->age=a;}cout<<"是否修改用水量(1:Yes 0:No) :";cin>>c4;if(c4==1){cout<<"输入用水量:";cin>>w;p->water=w;p->watermoney=0.5*(p->water-10);}cout<<"是否修改用电量(1:Yes 0:No) :";cin>>c5;if(c5==1){cout<<"输入用电量:";cin>>p1;p->power=p1;p->powermoney=0.5*(p1-10);}cout<<"是否修改所交水费(1:Yes 0:No) :";cin>>c7;if(c7==1){cout<<"是否已交水费(1:Yes 0:No) :";cin>>c7;if(c7==1)p->realwatermoney=p->watermoney;else}
p->realwatermoney=0.0;cout<<"是否修改所交电费(1:Yes 0:No) :";cin>>c8;13if(c8==1){cout<<"是否已交电费(1:Yes 0:No) :";cin>>c8;if(c8==1)p->realpowermoney=p->powermoney;else}
p->realpowermoney=0.0;cout<<"修改后的结果为:"<<endl;cout<<"编号"<<'\t'<<"班级"<<'\t'<<"姓名"<<'\t'<<"性别"<<'\t'<<"年龄"<<'\t'<<"用水量"<<'\t'<<"交水费"<<'\t'<<"用电量"<<'\t'<<"交电费"<<endl<<endl;p->disp();}}删除功能代码:voidStudent::del(Student*p)/删除某学生记录{Student*pre=p;intn;p=p->next;if(!p){cout<<"记录为空,无法删除!"<<endl;return;}cout<<"输入要删除的学生编号 :";cin>>n;while(p){if(p->no==n){pre->next=p->next;cout<<"成功删除编号为"<<n<<"的教工记录!"<<endl;return;}pre=p;p=p->next;}cout<<"所要删除的学生记录不存在!"<<endl;}统计功能代码:voidStudent::count(Student*p) /统计学生水电量及水电费信息{Student*q=p;14p=p->next;doublew=0.0,p1=0.0,wm=0.0,pm=0.0,wm1=0.0,pm1=0.0;intchoice,count1=0,count2=0;cout<<"输入统计选项:1用水用电量 2电费水费 3:未缴纳水电费人员 :";cin>>choice;switch(choice){case1:while(p!=NULL){w+=p->water;p1+=p->power;p=p->next;}cout<<"学生总用水量为:"<<w<<endl;cout<<"学生总用电量为:"<<p1<<endl;break;case2:while(p!=NULL){case3:
wm+=p->watermoney;wm1+=p->realwatermoney;pm+=p->powermoney;pm1+=p->realpowermoney;p=p->next;}cout<<"学生所用总水费为:"<<wm<<endl;cout<<"学生所用总电费为:"<<pm<<endl;cout<<"学生实际所交总水费为:"<<wm1<<endl;cout<<"学生实际所交总电费为:"<<pm1<<endl;break;cout<<"--------------------------------------------------"<<endl;while(p!=NULL){if(p->water>10&&p->realwatermoney==0.0){cout<<"编号:"<<p->no<<'\t'<<"姓名:"<<p->name<<endl;count1++;}p=p->next;}cout<<"未交水费的人数为:"<<count1<<endl;cout<<"--------------------------------------------------"<<endl<<endl;p=q;15p=p->next;while(p){if(p->power>10&&p->realpowermoney==0.0){cout<<"编号:"<<p->no<<'\t'<<"姓名:"<<p->name<<endl;count2++;}p=p->next;}cout<<"未交电费的人数为:"<<count2<<endl;cout<<"--------------------------------------------------"<<endl;break;default:cout<<"输入选项错误,失败!"<<endl;break;}}保存功能代码:voidStudent::save(Student*p)/将信息保存到文件中{ofstreamout("Student.txt");if(!out){cout<<"保存失败!"<<endl;return;}p=p->next;while(p){out<<p->no<<""<<p->Class<<""<<p->name<<""<<p->sex<<""<<p->age<<""<<p->water<<" "<<p->realwatermoney<<" "<<p->power<<""<<p->realpowermoney<<endl;p=p->next;}cout<<"保存成功!"<<endl;out.close();}读取功能代码:intStudent::read(Student*q)/从文件中读取所有学生信息{Student*p;ifstreamin;in.open("Student.txt");16if(!in){cout<<"读取失败!"<<endl;return0;}while(in>>no>>Class>>name>>sex>>age>>water>>realwatermoney>>power>>realpowermoney){p=newStudent(no,Class,name,sex,age,water,power,realwatermoney,realpowermoney);q->next=p;p->next=NULL;q=p;}return1;in.close();}三、调试分析1.实际完成的情况说明(完成的功能,支持的数据类型等)。(1)添加功能:程序能够按照编号递增的顺序添加不同学生和教工的记录,如果添加了重复编号的记录时,则取消添加。(2)查询功能:可根据姓名、用水量、用电量信息对已添加的学生或教工记录进行查询。(3)显示功能:可显示当前系统中所有学生和教工的记录,每条记录占据一行。(4)编辑功能:可根据查询结果对相应的记录进行修改,修改时注意编号的唯一性。(5)删除功能:对已添加的学生或教工记录进行删除。(6)统计功能:能统计学生和教工的用水用电量、所要交纳的电费和水费、未交纳水电费的人员信息。(7)保存功能:可将当前系统中各类记录存入文件中。(8)读取功能:可将保存在文件中的信息读入到当前系统中,供用户进行使用。(9)计算电费和水费。学生每月都有一定额度的水电是免费使用的,超过的部分需要交费按照公式watermoney/powermoney=0.5*(water/power-10)计算。支持的数据类型为:int,string,double,自定义的类类型Person,Student,acher。2.程序的性能分析。*程序编写了三个类:Person、Student和Teacher,其中Student和Teacher类中又都包含了添加、查询、显示、编辑、删除、统计、保存、和读取功能,程序能够正常运行,且所编写功能都能成功实现,程序运行速度也较快,不会出现太长的反应时间。空间复杂度上,该程序主要用到了两个链表,两个txt文本。总体来说,该程序性能良好。3.上机过程中出现的问题及其解决方案1.程序运行时于所有的信息都储存在文件里以对信息处理的前提就是打开文件,而未完善前的程序时只能在学生或教工管理系统所包含的八个功能里选择以难免会忘记首先选择读取功能后解决的方法是在student_menu()和teacher_menu()函数中别加入17代码head1->read(head1);和head2->read(head2);首先打开文件,再根据输入选择执行的功能。2.在对学生和教工信息记录进行添加处理是,未完善程序前,所添加的信息都是在指针尾部添加,写入文件也是按链表顺序写入,所以就会有编号就没有序。最后解决方法是,每次添加信息,都按编号递增的顺序进行添加,使整个文件的信息有序。3.由于对学生信息操作,就可能引起学生信息的改变,未完善前的程序,是操作者必须想着是否保存文件时忘记选择保存功能成修改文件数据没有被保存后解决办法,如果操作者没有保存文件,就会显示一个提示问操作者是否要保存文件。4.最初程序编译时,一直显示unexpectendoffile,可一直找不到错误,最后发现时由于一个函数里少了一个“5.在未完善程序时,水费和电费是根据水电量,按公式watermoney/powermoney=0.5*(water/power-10)进行赋值的样就不存在不交电费和水费的情况,所以进行统计时,未交水费和电费的人数永远是0。最后解决的办法时,在Person类中又添加了两个数据成员:realwatermoney和realpowermoney,非别代表学生或教工实际所交水、电费,若交了电费,则按照公式计算,若未交,则为0.0,统计未交水、电费人数时,若水、电费超过10,且实际所交水、电费为0,则未交费。在统计水电费时会统计中,学生和教师所应交的水电费和实际所交的水电费。6.程序未完善时,只能统计未交水费、电费的人数,但并不能输出未交费的具体人员。最后解决的办法时,将最初的一次循环改为两次,分开统计未交水费和电费的人,未交费就输出该条记录所对应的编号和姓名,最后输出未交费的人数。4.程序中可以改进的地方说明在进行信息添加、编辑和删除时可以加一个while(1)循环,这样就可以添加、编辑和删除多条记录,直到选择操作结束,才会退出功能函数。5.程序中可以扩充的功能及设计实现构想可以为每个用户设置一个账号且每个账号设置相应的密码个用户进入高校水电费管理系统前,都要输入相应的用户账号和密码,而不是像现在这样直接进入系统,这样设置账号之后,就不是所有人都能直接进入系统进行,随意查看、修改信息,有利于保障信息安全。可以建立一个用户文件保存用户的账号和密码信息主函数里添加输入用户名和密码的代码,并将输入的用户名和密码和文件里的信息相比对,如果符合,则进入高校水电费管理系统,接下来的实现就与该程序相同;如果没有符合的,则显示输入错误,不能进入系统。四、用户手册(说明程序的运行环境,程序执行结果,详细列出每一步的操作步骤。可以插图)1.程序运行环境:VC++6.02.程序执行结果,如下所示:18进入高校水电费管理系统。如图4.1所示:图4.1选择1,进入学生信息管理系统(此时文件中的信息已被读取),并选择3,显示当前文件中的记录。如图4.2所示:图4.219按任意键,返回学生管理系统界面,并选择1,进行信息添加。如图4.3所示:图4.3按任意键,返回学生管理系统界面,并选择3进行显示当前信息。如图4.4所示:图4.420按任意键,返回学生管理系统界面,并选择1,继续进行信息添加。如图4.5所示:图4.5按任意键,返回学生管理系统界面,并选择3进行显示当前信息,根据显示结果可以看到是按学号递增的顺序添加信息的。如图4.6所示:图4.621按任意键,返回学生管理系统界面,并选择2进行查询,然后选择1按姓名查询,并将查询结果输出。如图4.7所示:图4.7按任意键,返回学生管理系统界面,并选择2进行查询,然后选择2按用水量查询,并将查询结果输出。如图4.8所示:图4.822按任意键,返回学生管理系统界面,并选择4进行编辑,并将编辑后的信息显示。如图4.9所示:图4.9按任意键,返回学生管理系统界面,并选择5进行删除编号为4的学生记录。如图4.10所示:图4.1023按任意键,返回学生管理系统界面,并选择3进行显示,显示为删除后的信息。如图4.11所示:图4.11按任意键,返回学生管理系统界面,并按7进行保存修改的信息到文件中。如图4.12所示:图4.1224按任意键,返回学生管理系统界面,并选择8读取文件信息。如图4.13所示:图4.13按任意键,返回学生管理系统界面,按3进行显示,说明修改的信息已保存成功。如图4.14所示:图4.1425按任意键,返回学生管理系统界面,并选0退出学生管理系统(若对信息修改后没有进行保存,系统在退出时会显示是否保存更改,该功能在教工信息管理系统中有演示),如图4.15所示。然后按任意键返回高校管理系统界面,如图4.16所示:图4.15图4.1626选2可进入教室信息管理系统,可以看到,其实现的功能与学生信息管理系统相同,操作也相同(这里演示部分功能)。选择3,显示当前文件中的教工记录。如图4.17所示:图4.17按任意键,返回教工管理系统,并选择1添加编号为3的记录,然后按任意键返回教工管理系统,选择3显示添加后的信息。如图4.18所示:图4.1827按任意键,返回教工管理系统,并选择6进行统计,然后选择1统计电费水费。如图4.19所示:图4.19按任意键回教工管理系统选择6后选择3统计未缴纳水电费人员图4.20所示:图4.2028按任意键,返回教工管理系统,并选择0退出教工管理系统,由于进行了添加操作,而没有选择保存,所以系统会在退出时提示是否将更改保存到文件“Teacher.txt”中,选1保存,退出系统。如图4.21所示:图4.21按任意键返回高校管理系统,并选择0,退出系统。如图4.22所示:图4.2229按任意键。如图4.23所示:图4.23五、设计总结(可谈一谈本次课程设计的经验和体会)本次课程设计,实现的是高校水电费管理系统的设计,由于考虑到数组的溢出问题,故采用了链表操作。该高校水电管理系统要实现的是对学生和教工信息的管理括对学生和教工信息的添加、查询、显示、编辑、删除、统计、保存和读取功能的实现。在设计程序时,我设计了一个Person类个Student类和一个Teacher类erson类主要包括的是Student和Teacher公有的数据成员,在Student类和Teacher类中主要是系统功能的实现(添加、查询、显示、编辑、删除、统计、保存和读取)。程序设计时,由于先写的是三个类的设计,而写的过程中,由于学生和教工类实现的功能相同,就思考如何潘盾是调用Student类函数还是Teacher类函数,后来就开始思索主函数中对各方法的调用主函数里将高校水电费管理系统为学生管理系统和教工管理系统个管理系统分别进入两个管理菜单样就可以在各自的管理系统里调用各自的方法,而且将信息,分别写进两个文件,互不影响。在程序编写时于整个程序使用的都是链表操作以要求对指针的使用必须非常娴熟。平时编写程序时对链表的练习也比较少,所以此次选用指针对自己也是一个挑战,也正是通过这次课程设计,让我发现了平常使用指针过程中的一些问题。通过实地操作,对指针的访问,链表中结点的建立,使用了new来动态建立链表结点,以及头结点的使用有了更深的了解。通过此次课程设计,我对这学期学习到的C++知识点有了更好地掌握和巩固加深了对链表和指针的理解。在此次程序设计时于我是直接将功能基本都实现后才进行编译以编译时报出了很多错误到这么多错误然感到很失落甚至说是忧愁过最后还是耐心地一一改正,看到程序成功运行,也感到很有成就感。通过此次设计,也警告我,以后写程序时,要分模块编写,编译无误后再继续添加新的代码,毕竟编写较大点的程序时,我们难免保证不出现30错误。六、参考文献[1]李兰,任凤华.C++面向对象程序设计.西安:西安电子科技大学出版社,2010[2]李兰,任凤华.《C++面向对象程序设计》实验指导及习题解析.西安:西安电子科技大学出版社,2010[3]郑莉,董渊.C++程序设计基础教程.北京:清华大学出版社,2010[4]郑莉.C++程序设计基础教程学生用书.北京:清华大学出版社,2010七、附录(要加上注释)#include<iostream>usingnamespacestd;#include<string>#include<iomanip>#include<fstream>#include<conio.h>classPerson/公共基类Person类{public:Person(int n=0,string na="",string s="",int a=0,double w=0.0,double p=0.0,doublewm=0.0,doublepm=0.0)/Person构造函数{no=n;name=na;sex=s;age=a;water=w;power=p;if(wm<0)wm=0;if(pm<0)pm=0;realwatermoney=wm;realpowermoney=pm;watermoney=0.5*(water-10);if(w<=10)watermoney=0;powermoney=0.5*(power-10);if(p<=10)powermoney=0;}intno;stringname;stringsex;31intage;doublewater;doublepower;doublerealpowermoney;/实际所交电费doublerealwatermoney;/实际所交水费doublepowermoney;/应交电费doublewatermoney;/应交电费};classStudent:publicPerson/学生类{public:stringClass;Student*next;public:Student(int n=0,string Cl="",string na="",string s="",int a=0,double w=0.0,doublep=0.0,doublewm=0.0,doublepm=0.0)/Student构造函数:Person(n,na,s,a,w,p,wm,pm){Class=Cl;}voiddisp();voidappend(Student*p,Student*q);/添加voidfind(Student*p);/查找voidshow(Student*p);/显示voidedit(Student*p);/编辑voiddel(Student*p);/删除voidcount(Student*p);/统计voidsave(Student*p);intread(Student*q);};voidStudent::disp()/显示一个学生信息{cout<<no<<'\t'<<Class<<'\t'<<name<<'\t'<<sexge<<'\t'<<water<<'\t'<<realwatermoney<<'\t'<<power<<'\t'<<realpowermoney<<endl;}voidStudent::append(Student*p,Student*q)/添加记录{Student *pre=p;while(p->next){p=p->next;if(p->no==q->no) /判断所添加记录是否重复{cout<<"记录重复,添加失败!"<<endl;32return;}}p=pre;p=p->next;while(p){if(q->no<p->no) /按编号递增的顺序添加记录{pre->next=q;q->next=p;break;}pre=p;p=p->next;}if(p==NULL){pre->next=q;q->next=p;}cout<"该学生记录添加成功!"<endl;/保存到链表中,并未写入文件}voidStudent::find(Student*p)/查找记录,p为头指针{intflag=0;p=p->next;intchoice;strings;doublew;doublepo;cout<<"输入选择查询依据:1按姓名查询 2按用水量查询 3按用电量查询 :";cin>>choice;cout<<"-----------------------------------------------------------------------------"<<endl;cout<<"编号"<<'\t'<<"班级"<<'\t'<<"姓名"<<'\t'<<"性别"<<'\t'<<"年龄"<<'\t'<<"用水量"<<'\t'<<"交水费"<<'\t'<<"用电量"<<'\t'<<"交电费"<<endl<<endl;switch(choice){case1:cout<<"输入要查询的姓名 :";cin>>s;/按姓名查找while(p!=NULL){if(p->name==s){ p->disp();/将所有符合的记录输出flag=1;33}p=p->next;}if(!flag){cout<<"没有找到该记录!"<<endl;return;}cout<<"-----------------------------------------------------------------------------"<<endl;break;case2:cout<<"输入查询的用水量 :";cin>>w;/按用水量查询while(p!=NULL){if(p->water==w){ p->disp();/将所有符合的记录输出flag=1;}p=p->next;}if(!flag){cout<<"没有找到该记录!"<<endl;return;}cout<<"-----------------------------------------------------------------------------"<<endl;break;case3:cout<<"输入查询的用电量 :";cin>>po;/按用电量查询while(p!=NULL){if(p->power==po){ p->disp();/将所有符合的记录输出flag=1;}p=p->next;}if(!flag){cout<<"没有找到该记录!"<<endl;return;}cout<<"-----------------------------------------------------------------------------"<<endl;break;default:cout<<"无此项,输入错误!"<<endl;break;}34}voidStudent::show(Student*p) /显示所有的学生记录{p=p->next;if(!p){cout<<"记录为空!"<<endl;return;}cout<<"----------------------------------------------------------------------------"<<endl;cout<<"编号"<<'\t'<<"班级"<<'\t'<<"姓名"<<'\t'<<"性别"<<'\t'<<"年龄"<<'\t'<<"用水量"<<'\t'<<"交水费"<<'\t'<<"用电量"<<'\t'<<"交电费"<<endl<<endl;while(p){p->disp();p=p->next;}cout<<"----------------------------------------------------------------------------"<<endl;}voidStudent::edit(Student*p) /编辑某学生记录{stringna;strings;inta;stringCl;doublew,p1;intc1,c2,c3,c4,c5,c6,c7,c8;cout<<"输入要修改学生的编号 :";intn;cin>>n;p=p->next;while(p!=NULL&&p->no!=n){p=p->next;}if(p==NULL){cout<<"不存在该学生记录!"<<endl;return;}if(p->no==n){cout<<"是否修改班级(1:Yes 0:No) :";cin>>c1;35if(c1==1){cout<<"输入班级:";cin>>Cl;p->Class=Cl;}cout<<"是否修改姓名(1:Yes 0:No) :";cin>>c2;if(c2==1){cout<<"输入姓名:";cin>>na;p->name=na;}cout<<"是否修改性别(1:Yes 0:No) :";cin>>c3;if(c3==1){cout<<"输入性别:";cin>>s;p->sex=s;}cout<<"是否修改年龄(1:Yes 0:No) :";cin>>c6;if(c6==1){cout<<"输入年龄:";cin>>a;p->age=a;}cout<<"是否修改用水量(1:Yes 0:No) :";cin>>c4;if(c4==1){cout<<"输入用水量:";cin>>w;p->water=w;p->watermoney=0.5*(p->water-10);}cout<<"是否修改用电量(1:Yes 0:No) :";cin>>c5;if(c5==1){cout<<"输入用电量:";cin>>p1;p->power=p1;p->powermoney=0.5*(p1-10);}cout<<"是否修改所交水费(1:Yes 0:No) :";cin>>c7;36if(c7==1){cout<<"是否已交水费(1:Yes 0:No) :";cin>>c7;if(c7==1)p->realwatermoney=p->watermoney;else}
p->realwatermoney=0.0;cout<<"是否修改所交电费(1:Yes 0:No) :";cin>>c8;if(c8==1){cout<<"是否已交电费(1:Yes 0:No) :";cin>>c8;if(c8==1)p->realpowermoney=p->powermoney;else}
p->realpowermoney=0.0;cout<<"修改后的结果为:"<<endl;cout<<"编号"<<'\t'<<"班级"<<'\t'<<"姓名"<<'\t'<<"性别"<<'\t'<<"年龄"<<'\t'<<"用水量"<<'\t'<<"交水费"<<'\t'<<"用电量"<<'\t'<<"交电费"<<endl<<endl;p->disp();}}voidStudent::del(Student*p)/删除某学生记录{Student*pre=p;intn;p=p->next;if(!p){cout<<"记录为空,无法删除!"<<endl;return;}cout<<"输入要删除的学生编号 :";cin>>n;while(p){if(p->no==n){pre->next=p->next;cout<<"成功删除编号为"<<n<<"的教工记录!"<<endl;return;37}pre=p;p=p->next;}cout<<"所要删除的学生记录不存在!"<<endl;}voidStudent::count(Student*p) /统计学生水电量及水电费信息{Student*q=p;p=p->next;doublew=0.0,p1=0.0,wm=0.0,pm=0.0,wm1=0.0,pm1=0.0;intchoice,count1=0,count2=0;cout<<"输入统计选项:1用水用电量 2电费水费 3:未缴纳水电费人员 :";cin>>choice;switch(choice){case1:while(p!=NULL){w+=p->water;p1+=p->power;p=p->next;}cout<<"学生总用水量为:"<<w<<endl;cout<<"学生总用电量为:"<<p1<<endl;break;case2:while(p!=NULL){case3:
wm+=p->watermoney;wm1+=p->realwatermoney;pm+=p->powermoney;pm1+=p->realpowermoney;p=p->next;}cout<<"学生所用总水费为:"<<wm<<endl;cout<<"学生所用总电费为:"<<pm<<endl;cout<<"学生实际所交总水费为:"<<wm1<<endl;cout<<"学生实际所交总电费为:"<<pm1<<endl;break;cout<<"--------------------------------------------------"<<endl;while(p!=NULL){if(p->water>10&&p->realwatermoney==0.0){38cout<<"编号:"<<p->no<<'\t'<<"姓名:"<<p->name<<endl;count1++;}p=p->next;}cout<<"未交水费的人数为:"<<count1<<endl;cout<<"--------------------------------------------------"<<endl<<endl;p=q;p=p->next;while(p){if(p->power>10&&p->realpowermoney==0.0){cout<<"编号:"<<p->no<<'\t'<<"姓名:"<<p->name<<endl;count2++;}p=p->next;}cout<<"未交电费的人数为:"<<count2<<endl;cout<<"--------------------------------------------------"<<endl;break;default:cout<<"输入选项错误,失败!"<<endl;break;}}voidStudent::save(Student*p)/将信息保存到文件中{ofstreamout("Student.txt");if(!out){cout<<"保存失败!"<<endl;return;}p=p->next;while(p){out<<p->no<<""<<p->Class<<""<<p->name<<""<<p->sex<<""<<p->age<<""<<p->water<<" "<<p->realwatermoney<<" "<<p->power<<""<<p->realpowermoney<<endl;p=p->next;}cout<<"保存成功!"<<endl;out.close();}39intStudent::read(Student*q)/从文件中读取所有学生信息{Student*p;ifstreamin;in.open("Student.txt");if(!in){cout<<"读取失败!"<<endl;return0;}while(in>>no>>Class>>name>>sex>>age>>water>>realwatermoney>>power>>realpowermoney){p=newStudent(no,Class,name,sex,age,water,power,realwatermoney,realpowermoney);q->next=p;p->next=NULL;q=p;}return1;in.close();}classTeacher:publicPerson/Teacher类{public:stringpart;Teacher*next;public:Teacher(int n=0,string pa="",string na="",string s="",int a=0,double w=0.0,doublep1=0.0,doublewm=0.0,doublepm=0.0):Person(n,na,s,a,w,p1,wm,pm)/Teacher构造函数{part=pa;}voiddisp();/显示一个教工信息voidshow(Teacher*p);/查看所有的教工信息voidappend(Teacher*p,Teacher*q);/添加教工记录voidfind(Teacher*p);/查找记录voidedit(Teacher*p);/编辑记录voiddel(Teacher*p);/删除记录voidcount(Teacher*p);/统计教工水电量及水电费信息voidsave(Teacher*p);/将信息保存到文件中intread(Teacher*q);/从文件中读取所有教工信息};40voidTeacher::disp(){cout<<no<<'\t'<<part<<'\t'<<name<<'\t'<<sexge<<'\t'<<water<<'\t'<<realwatermoney<<'\t'<<power<<'\t'<<realpowermoney<<endl;}voidTeacher::show(Teacher*p){p=p->next;if(!p){cout<<"记录为空!"<<endl;return;}cout<<"----------------------------------------------------------------------------"<<endl;cout<<"编号"<<'\t'<<"部门"<<'\t'<<"姓名"<<'\t'<<"性别"<<'\t'<<"年龄"<<'\t'<<"用水量"<<'\t'<<"交水费"<<'\t'<<"用电量"<<'\t'<<"交电费"<<endl<<endl;while(p){p->disp();p=p->next;}cout<<"----------------------------------------------------------------------------"<<endl;}voidTeacher::append(Teacher*p,Teacher*q)/添加记录,p为头指针,q为所添加记录{Teacher *pre=p;while(p->next) /判断所添加记录是否重复{p=p->next;if(p->no==q->no){cout<<"记录重复,添加失败!"<<endl;return;}}p=pre;p=p->next;while(p){if(q->no<p->no) /将记录按编号递增的顺序进行添加{pre->next=q;q->next=p;break;41}pre=p;p=p->next;}if(p==NULL){pre->next=q;q->next=p;}cout<"该教工记录添加成功"<<endl;/保存到链表中,并未写入文件}voidTeacher::find(Teacher*p)/查找记录,p为头指针{intflag=0;p=p->next;intchoice;strings;doublew;doublepo;cout<<"输入选择查询依据:1按姓名查询 2按用水量查询 3按用电量查询 :";cin>>choice;cout<<"-----------------------------------------------------------------------------"<<endl;cout<<"编号"<<'\t'<<"部门"<<'\t'<<"姓名"<<'\t'<<"性别"<<'\t'<<"年龄"<<'\t'<<"用水量"<<'\t'<<"交水费"<<'\t'<<"用电量"<<'\t'<<"交电费"<<endl;switch(choice){case1:cout<<"输入要查询的姓名 :";cin>>s;/按姓名查找while(p!=NULL){if(p->name==s){ p->disp();/将所有符合的记录输出flag=1;}p=p->next;}if(!flag){cout<<"没有找到该教工该记录!"<<endl;}cout<<"-----------------------------------------------------------------------------"<<endl;break;case2:cout<<"输入查询的用水量 :";cin>>w;/按用水量查询while(p!=NULL){42if(p->water==w){ p->disp();/将所有符合的记录输出flag=1;}p=p->next;}if(!flag){cout<<"没有找到该记录!"<<endl;}break;case3:cout<<"输入查询的用电量 :";cin>>po;/按用电量查询while(p!=NULL){if(p->power==po){ p->disp();/将所有符合的记录输出flag=1;}p=p->next;}if(!flag){cout<<"没有找到该教工记录!"<<endl;}break;default:cout<<"无此项,输入错误!"<<endl;break;}}voidTeacher::edit(Teacher*p)/编辑记录{stringna;strings;inta;stringpa;doublew,p1;intc1,c2,c3,c4,c5,c6,c7,c8;cout<<"输入要修改的教工编号:";intn;cin>>n;p=p->next;while(p!=NULL&&p->no!=n){p=p->next;}43if(p==NULL){cout<<"不存在该教工记录!"<<endl;return;}if(p->no==n){cout<<"是否修改部门(1:Yes0:No):";cin>>c1;if(c1==1){cout<<"输入部门:";cin>>pa;p->part=pa;}cout<<"是否修改姓名(1:Yes 0:No) :";cin>>c2;if(c2==1){cout<<"输入姓名:";cin>>na;p->name=na;}cout<<"是否修改性别(1:Yes 0:No) :";cin>>c3;if(c3==1){cout<<"输入性别:";cin>>s;p->sex=s;}cout<<"是否修改年龄(1:Yes 0:No) :";cin>>c6;if(c6==1){cout<<"输入年龄:";cin>>a;p->age=a;}cout<<"是否修改用水量(1:Yes 0:No) :";cin>>c4;if(c4==1){cout<<"输入用水量:";cin>>w;p->water=w;p->watermoney=0.5*(p->water-10);}cout<<"是否修改用电量(1:Yes 0:No) :";cin>>c5;44if(c5==1){cout<<"输入用电量:";cin>>p1;p->power=p1;p->powermoney=0.5*(p1-10);}cout<<"是否修改所交水费(1:Yes 0:No) :";cin>>c7;if(c7==1){cout<<"是否已交水费(1:Yes 0:No) :";cin>>c7;if(c7==1)p->realwatermoney=p->watermoney;else}
p->realwatermoney=0.0;cout<<"是否修改所交电费(1:Yes 0:No) :";cin>>c8;if(c8==1){cout<<"是否已交电费(1:Yes 0:No) :";cin>>c8;if(c8==1)p->realpowermoney=p->powermoney;else}
p->realpowermoney=0.0;cout<<"编号"<<'\t'<<"部门"<<'\t'<<"姓名"<<'\t'<<"性别"<<'\t'<<"年龄"<<'\t'<<"用水量"<<'\t'<<"交水费"<<'\t'<<"用电量"<<'\t'<<"交电费"<<endl;p->disp();}}voidTeacher::del(Teacher*p)/删除记录{Teacher*pre=p;intn;p=p->next;if(!p){ cout<<"记录为空,无法删除!"<<endl;return;}cout<<"输入要删除的教工编号 :";cin>>n;while(p)45{if(p->no==n){pre->next=p->next;cout<<"成功删除编号为"<<n<<"的教工记录!"<<endl;return;}pre=p;p=p->next;}cout<<"所要删除的教工不存在!"<<endl;}voidTeacher::count(Teacher*p)/统计教工水电量及水电费{Teacher*q=p;p=p->next;doublew=0.0,p1=0.0,wm=0.0,pm=0.0,wm1=0.0,pm1=0.0;intchoice,count1=0,count2=0;cout<<"输入统计选项:1用水用电量 2电费水费 3:未缴纳水电费人员 :";cin>>choice;switch(choice){case1:while(p!=NULL){w+=p->water;p1+=p->power;p=p->next;}cout<<"教工总用水量为:"<<w<<endl;cout<<"教工总用电量为:"<<p1<<endl;break;case2:while(p!=NULL){wm+=p->watermoney;wm1+=p->realpowermoney;pm+=p->powermoney;pm1+=p->realwatermoney;p=p->next;}cout<<"教工所用总水费为:"<<wm<<endl;cout<<"教工所用总电费为:"<<pm<<endl;cout<<"教工实际所交总水费为:"<<wm1<<endl;cout<<"教工实际所交总电费为:"<<pm1<<endl;46break;case3:cout<<"--------------------------------------------------"<<endl;while(p!=NULL){if(p->water>10&&p->realwatermoney==0.0){cout<<"编号:"<<p->no<<'\t'<<"姓名:"<<p->name<<endl;count1++;}p=p->next;}cout<<"未交水费的人数为:"<<count1<<endl;cout<<"--------------------------------------------------"<<endl<<endl;p=q;p=p->next;while(p){if(p->power>10&&p->realpowermoney==0.0){cout<<"编号:"<<p->no<<'\t'<<"姓名:"<<p->name<<endl;count2++;}p=p->next;}cout<<"未交电费的人数为:"<<count2<<endl;cout<<"--------------------------------------------------"<<endl;break;default:cout<<"输入选项错误,失败!"<<endl;break;}}voidTeacher::save(Teacher*p)/将信息保存到文件中{ofstreamout("Teacher.txt");if(!out){cout<<"保存失败!"<<endl;return;}p=p->next;while(p){out<<p->no<<""<<p->part<<""<<p->name<<""<<p->sex<<""<<p->age<<""<<47p->water<<" "<<p->realwatermoney<<" "<<p->power<<""<<p->realpowermoney<<endl;p=p->next;}cout<<"保存成功!"<<endl;out.close();}intTeacher::read(Teacher*q)/从文件中读取所有的教工信息{Teacher*p;ifstreamin;in.open("Teacher.txt");if(!in){cout<<"读取失败!"<<endl;return0;}ney)
while(in>>no>>part>>name>>sex>>age>>water>>realwatermoney>>power>>realpowermo{p=newTeacher(no,part,name,sex,age,water,power,realwatermoney,realpowermoney);q->next=p;p->next=NULL;q=p;}return1;in.close();}voidstudent_menu(){Studentheadnode1,*head1,*t;/定义头结点,头指针intflag=0;/定义是否对信息修改的标志head1=&headnode1;/头指针指向头结点head1->next=NULL;/初始化链表为空intnoo;stringna;strings;inta;stringCl;doublew;doublep1,wm,pm;intn=1,k;head1->read(head1);/操作前先读取文件里的信息cout<<" 学生信息管理系统"<<endl;while(n){cout<<"-----------------------------------------------------------------------------"<<endl;:添加"<<endl;:查询"<<endl;48:显示"<<endl;:编辑"<<endl;:删除"<<endl;:统计"<<endl;:保存"<<endl;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 第九课 成功贵在坚持教学设计小学心理健康南大版五年级-南大版
- 10 做个合格的“保管员”教学设计-2025-2026学年小学综合实践活动一年级下册冀少版
- 2025年安徽亳州中考试题及答案
- 建筑幕墙维护与保养技术方案
- 高端幕墙玻璃生产线项目建筑工程方案
- 3 短诗五首2024-2025学年九年级下册语文同步说课稿(统编版)
- 本册综合教学设计-2025-2026学年小学综合实践活动二年级上册(2018)鲁科版
- 第三课 朋友真给力说课稿-2025-2026学年小学心理健康五年级鄂科版
- 8.1 北京市的城市特征与建设成就说课稿2025-2026学年湘教版地理八年级下册
- 人教版七年级生物(下)第一章 人的由来教学设计 (3份打包)
- 小学科学课堂教学课型分类(新)
- 《珍惜我们的眼睛:1 用眼习惯小调查》说课稿-2023-2024学年四年级下册综合实践活动沪科黔科版
- 《耳声发射与听力损失》课件
- 二零二五版养老保险单质押退休金贷款合同3篇
- 第八章-统计指数(平均指数)
- 《电动自行车停放充电场所消防技术规范》(DB 32-T 3904-2020)
- 2024年废旧船舶拆解合同范本
- 川教版2024-2025学年五年级上册信息技术全册教案
- 清洁间歇性导尿的护理
- 哈工大课件教学课件
- 森林防火智能预警监测系统方案
评论
0/150
提交评论