资源描述
学 号 1307010225
高级程序设计语言C++课程设计
设计说明书
通讯录信息管理系统
起止日期: 2014年 6 月 16日 至 2014 年 6 月 20日
学生姓名
****
班级
计算机科学与技术(2)班
成绩
指导教师(签字)
计算机与信息工程学院
2014 年 6 月20日
21
高级程序设计语言C++课程设计
目 录
1、设计目的 5
2、总体设计 5
3、详细设计: 6
3.1、程序具体功能 6
3.2、调试分析 7
4、源程序和运行结果 8
4.1、源程序 8
4.2、运行结果 20
4.3、心得体会 24
工资管理系统
1、 设计目的
.通过实验实现对学生信息系统的管理操作;
.进一步掌握和利用C++进行程设计的能力;
.进一步理解和运用结构化程序设计的思想和方法;
.初步掌握开发一个小型实用系统的基本方法;
.学会利用流程图或N-S图表示算法;
.掌握书写程设计开发文档的能力(书写课程设计报告);
2、总体设计
通讯录信息管理系统
录入功能
文件读取功能
文件保存功能
浏览功能
查询功能(按ID,类别)
修改功能(按ID)
删除供能(按ID)
排序供能(按ID,类型)
退出功能
3、详细设计:
3.1、程序具体功能:
1、联系人信息录入功能
2、联系人信息文件读取功能
3、联系人信息文件保存功能v
4、联系人信息浏览功能
5、查询功能:
l 1)按ID查询
l 2)按类型查询
6、修改功能:
根据ID修改相应信息;
7、删除联系人功能:
删除相应ID的联系人信息。
8、排序功能(由用户指定按照联系人类型或ID;指定升序或降序)
9、退出
3.2、调试分析
上机调试之前我们对所编的程序作了纸面上的检查,先改正一些不该犯错误,如{ }没有搭配完整,漏写 ,拼写错误等,这些都是我们通过认真的态度在运行之前可以解决、避免的。而且还可以减少机器时间。往往一连串的错误是由于漏写或写错一个字符引起的。
在上机调试过程中,对文件这一节的知识还不够熟悉,所以在解决输入输出流的过程中出了很多问题。
问题如下:
(1)定义了count这menu类的成员,使count的寿命在执行系统操作时一直延续,但是保存文件后,不知如何读取,进一步又了解到输入流的读取方式。除此之外,还发现无法读取保存文件中的汉字,会出现乱码。(2)文件输入输出时要保证读取和保存的数据顺序一致。(3)读取之前要先保存文件
1、类函数声明后,要在括号后加逗号。
2、头文件的声明(如string,iomanip等)。
3、派生类构造函数的定义问题,(如基类构造函数为空时,派生类无需再定义,以及个数问题)。
4、if判断,for循环语句,中括号不成对,以及括号所包围的内容。
5、类的私有成员只能通过共有的成员函数和友元函数来调用。
6、定义的变量在全体函数中的寿命。
4、源程序和运行结果
4.1、源程序
#include <iostream>
#include <string>
#include <fstream>
#include <iomanip>
using namespace std;
//////////////////////////////////
class Date
{
private:
int year;
int day;
int month;
public:
Date();
void set_Date();
void Date_display();
int get_year();
int get_day();
int get_month();
string get_data();
void Date_sweep();
void change_year(int n);
void change_month(int n);
void change_day(int n);
void set_all(int y,int m,int d);
};
void Date::set_all(int y,int m,int d)
{
year = y;
month = m;
day =d ;
}
Date::Date()
{
year=0;
month=0;
day=0;
}
void Date::change_month(int n)
{
month=n;
}
void Date::change_year(int n)
{
year=n;
}
void Date::change_day(int n)
{
day=n;
}
void Date::Date_sweep()
{
year=0;
month=0;
day=0;
}
void Date::set_Date()
{
cout<<"存储日期"<<endl;
cout<<"年:";
cin>>year;
cout<<"月:";
cin>>month;
cout<<"日:";
cin>>day;
cout<<endl;
}
void Date::Date_display()
{
cout<<"年:"<<year<<endl;
cout<<"月:"<<month<<endl;
cout<<"日:"<<day<<endl;
}
int Date::get_year()
{
return year;
}
int Date::get_month()
{
return month;
}
int Date::get_day()
{
return day;
}
string Date::get_data()
{
cout<<year;
return("年month月day日");
}
/////////////////////////////////////////
class people:public Date
{
private:
int ID;
int ID1;
int ID2;
int relation1;
int relation2;
string mobilephone;
string telephone;
string address;
string name;
string sex;
string relation;
public:
int get_ID();
string get_mobilephone();
string get_telephone();
string get_address();
string get_name();
string get_sex();
string get_relation();
void change_mobilephone(string n);
void change_telephone(string n);
void change_address(string n);
void change_sex(string n);
void change_name(string n);
void change_relation(string n);
void set_people();
void in_ID();
void people_display();
void people_sweep();
int compare_relation1(people &a,string b);
int compare_relation2(people &a,people &b);
int compare_ID1(people &a,people &b);
int compare_ID2(people &a,int b);
void set_allE(int I,string na,string se,string re,string mo,string te,string ad,int y,int m,int d);
people():Date()
{
ID=0;
ID1=4;
ID2=4;
relation1=4;
relation2=4;
mobilephone="?";
telephone="?";
address="?";
name="?";
sex="?";
relation="?";
}
};
void people::set_allE(int I,string na,string se,string re,string mo,string te,string ad,int y,int m,int d)
{
ID=I;
mobilephone=mo;
telephone=te;
address=ad;
name=na;
sex=se;
relation=re;
set_all(y,m,d);
}
void people::change_mobilephone(string n)
{
mobilephone=n;
}
void people::change_telephone(string n)
{
telephone=n;
}
void people::change_address(string n)
{
address=n;
}
void people::change_sex(string n)
{
sex=n;
}
void people::change_name(string n)
{
name=n;
}
void people::change_relation(string n)
{
relation=n;
}
void people::in_ID()
{
cout<<"ID:";
cin>>ID;
}
void people::set_people()
{
cout<<"姓名:";
cin>>name;
cout<<"性别:";
cin>>sex;
cout<<"关系:";
cin>>relation;
cout<<"手机:";
cin>>mobilephone;
cout<<"座机:";
cin>>telephone;
cout<<"地址:";
cin>>address;
}
void people::people_display()
{
cout<<"ID:"<<ID<<endl;
cout<<"姓名:"<<name<<endl;
cout<<"性别:"<<sex<<endl;
cout<<"关系:"<<relation<<endl;
cout<<"手机:"<<mobilephone<<endl;
cout<<"座机:"<<telephone<<endl;
cout<<"地址:"<<address<<endl;
}
int people::get_ID()
{
return ID;
}
string people::get_mobilephone()
{
return mobilephone;
}
string people::get_telephone()
{
return telephone;
}
string people::get_name()
{
return name;
}
string people::get_sex()
{
return sex;
}
string people::get_address()
{
return address;
}
string people::get_relation()
{
return relation;
}
int people::compare_relation1(people &a,string b)
{
if(a.relation>b)
relation1=0;
if(a.relation<b)
relation1=2;
if(a.relation==b)
relation1=1;
return(relation1);
}
int people::compare_relation2(people &a,people &b)
{
if(a.relation>b.relation)
relation2=0;
if(a.relation<b.relation)
relation2=2;
if(a.relation==b.relation)
relation2=1;
return(relation2);
}
int people::compare_ID1(people &a,people &b)
{
if(a.ID==b.ID)
ID1=1;
if(a.ID<b.ID)
ID1=2;
if(a.ID>b.ID)
ID1=0;
return(ID1);
}
int people::compare_ID2(people &a,int b)
{
if(a.ID==b)
ID2=1;
if(a.ID>b)
ID2=0;
if(a.ID<b)
ID2=2;
return(ID2);
}
void people::people_sweep()
{
Date_sweep();
mobilephone="?";
telephone="?";
address="?";
name="?";
sex="?";
relation="?";
}
////////////////////////////////////////////////////////
class Menu
{
private:
int count;
people Re[1000];
public:
Menu();
void menu();//显示菜单
void input_all();//输入所有联系人信息
void output_all();//输出所有联系人信息
void search_num();//查找指定联系人ID
void read_fromfile();//联系人信息的读取
void save_tofile();//联系人信息的保存
void order_message();//联系人信息排序
void Clean_Message();//删除联系人信息
void change_message();//修改联系人信息
void op();
};
Menu::Menu()
{
count=1;
}
void Menu::menu()
{
cout<<endl<<endl<<"*********通讯录管理信息系统**********"<<endl<<endl;
cout<<" 1、联系人信息的录入"<<endl;
cout<<" 2、联系人信息文件的保存"<<endl;
cout<<" 3、联系人信息文件的读取"<<endl;
cout<<" 4、联系人信息的浏览"<<endl;
cout<<" 5、查询联系人信息:"<<endl;
cout<<" A)按联系人ID查询"<<endl;
cout<<" B)按联系人关系查询"<<endl;
cout<<" 6、修改联系人信息:"<<endl;
cout<<" A)年"<<endl;
cout<<" B)月"<<endl;
cout<<" C)日"<<endl;
cout<<" D)姓名"<<endl;
cout<<" E)手机"<<endl;
cout<<" F)座机"<<endl;
cout<<" G)联系人关系"<<endl;
cout<<" H)地址"<<endl;
cout<<" I)性别"<<endl;
cout<<" 7、删除联系人信息:"<<endl;
cout<<" 8、联系人信息排序:"<<endl;
cout<<" A)按照联系人关系"<<endl;
cout<<" B)按照联系人ID"<<endl;
cout<<" a.升序"<<endl;
cout<<" b.降序"<<endl;
cout<<" 9、退出"<<endl;
}
void Menu::order_message()
{
char a;
cout<<"请输入以何种方式排序(A或B):";
cin>>a;
if(a=='A')
{
for(int i=0;i<count;i++)
for(int a=i+1;a<count;a++)
if(Re[i].compare_relation2(Re[i],Re[a])==0)
{
people b;
b=Re[a];
Re[a]=Re[i];
Re[i]=b;
}
}
if(a=='B')
{
char c;
cout<<"请输入(a升序,b降序):";
cin>>c;
if(c=='a')
{
for(int i=0;i<count;i++)
for(int a=i+1;a<count;a++)
if(Re[i].compare_ID1(Re[i],Re[a])==0)
{
people b;
b=Re[a];
Re[a]=Re[i];
Re[i]=b;
}
}
if(c=='b')
{
for(int i=0;i<count;i++)
for(int a=i+1;a<count;a++)
if(Re[i].compare_ID1(Re[i],Re[a])==2)
{
people b;
b=Re[a];
Re[a]=Re[i];
Re[i]=b;
}
}
}
op();
}
void Menu::input_all()
{
for(int i=0;i<=count;i++)
{
char a;
Re[i].in_ID();
for(int x=0;x<10;x++)
for(int b=0;b<count;b++)
{
if(b!=i)
{
if(Re[b].get_ID()==Re[i].get_ID())
{
cout<<"输入错误!,请重新输入:";
Re[i].in_ID();
}
}
}
Re[i].set_people();
Re[i].set_Date();
cout<<"是否继续输入(回复“N(或n)”停止输入,回复“Y(或y)”继续输入):";
cin>>a;
for(int c=0;c<10;c++)
{
if(a!='y'&&a!='Y'&&a!='n'&&a!='N')
{
cout<<"输入错误!,请重新输入:";
cin>>a;
}
else
break;
}
count++;
if(a=='n'||a=='N')
{
count--;
break;
}
}
op();
}
void Menu::output_all()
{
if(count==0)
cout<<"亲,你还没有存储的联系人哦!";
else
for(int i=0;i<count;i++)
{
Re[i].people_display();
Re[i].Date_display();
}
}
void Menu::Clean_Message()
{
int number;
int d;
int a=0;
cout<<"请输入要删除联系人的ID号:";
cin>>number;
for(int c=0;c<10;c++)
{
for(int i=0;i<count;i++)
if(Re[i].compare_ID2(Re[i],number)==1)
{
d=i;
a=1;
break;
}
if(a==0)
{
cout<<"输入有误!请重新输入:";
cin>>number;
}
}
for(;d<=count;d++)
Re[d]=Re[d+1];
count--;
op();
}
void Menu::change_message()
{
char a;
int b;
int number;
string c;
int d;
int x=0;
char e;
cout<<"请输入要修改联系人的ID号:";
cin>>number;
for(int f=0;f<10;f++)
{
for(int i=0;i<count;i++)
if(Re[i].compare_ID2(Re[i],number)==1)
{
d=i;
x=1;
break;
}
if(x==0)
{
cout<<"输入有误!请重新输入:";
cin>>number;
}
}
cout<<"请输入要修改联系人信息的方面(例如A,B):";
cin>>a;
if(a=='A')
{
cout<<"请重新输入年:";
cin>>b;
Re[d].change_year(b);
}
if(a=='B')
{
cout<<"请重新输入月:";
cin>>b;
Re[d].change_month(b);
}
if(a=='C')
{
cout<<"请重新输入日:";
cin>>b;
Re[d].change_day(b);
}
if(a=='D')
{
cout<<"请重新姓名:";
cin>>c;
Re[d].change_name(c);
}
if(a=='E')
{
cout<<"请重新输入手机号:";
cin>>c;
Re[d].change_mobilephone(c);
}
if(a=='F')
{
cout<<"请重新输入座机号:";
cin>>c;
Re[d].change_telephone(c);
}
if(a=='G')
{
cout<<"请重新输入联系人关系:";
cin>>c;
Re[d].change_relation(c);
}
if(a=='H')
{
cout<<"请重新输入地址:";
cin>>c;
Re[d].change_address(c);
}
if(a=='I')
{
cout<<"请重新输入性别:";
cin>>c;
Re[d].change_sex(c);
}
cout<<"是否查看修改后的信息(回复“N(或n)”否,回复“Y(或y)”是):";
cin>>e;
if(e=='y'||e=='Y')
{
Re[d].people_display();
Re[d].Date_display();
}
op();
}
void Menu::search_num()
{
char choice;
cout<<"请选择以何种方式查询(A或B):";
cin>>choice;
if(choice=='A')
{
int number;
int d;
int a=0;
cout<<"请输入要查询联系人的ID号:";
cin>>number;
for(int c=0;c<100;c++)
{
for(int i=0;i<count;i++)
if(Re[i].compare_ID2(Re[i],number)==1)
{
d=i;
a=1;
break;
}
if(a==0)
{
cout<<"输入有误!请重新输入:";
cin>>number;
}
}
if(a==1)
{
Re[d].people_display();
Re[d].Date_display();
}
}
if(choice=='B')
{
int a=0;
int d;
string Name;
cout<<"请输入要查询联系人的关系:";
cin>>Name;
for(int c=0;c<100;c++)
{
for(int i=0;i<count;i++)
if(Re[i].compare_relation1(Re[i],Name)==1)
{
d=i;
a=1;
break;
}
if(a==0)
{
cout<<"输入有误!请重新输入:";
cin>>Name;
}
}
if(a==1)
{
Re[d].people_display();
Re[d].Date_display();
}
}
op();
}
void Menu::read_fromfile()
{
int I;
string mo;
string te;
string ad;
string na;
string se;
string re;
int y,m,d;
ifstream infile("people.txt",ios::in);
if(!infile)
{
cerr<<"err!"<<endl;
exit(1);
}
infile>>count;
for(int i=0;i<count;i++)
{
infile>>I>>na>>se>>re>>mo>>te>>ad>>y>>m>>d;
Re[i].set_allE(I,na,se,re,mo,te,ad,y,m,d);
}
infile.close();
op();
}
void Menu::save_tofile()
{
ofstream outfile("people.txt",ios::out);
if(!outfile)
{
cerr<<"err!"<<endl;
exit(1);
}
outfile<<count<<endl;
for(int i=0;i<count;i++)
{
outfile<<setiosflags(ios::left);
outfile<<setw(10)<<Re[i].get_ID()<<" "<<setw(6)<<Re[i].get_name()<<" "<<setw(4)<<Re[i].get_sex()<<" "<<setw(8)<<Re[i].get_relation()<<" "<<setw(11)<<Re[i].get_mobilephone()<<" "<<setw(7)<<Re[i].get_telephone()<<" "<<setw(4)<<Re[i].get_address()<<" ";
outfile<<setw(4)<<Re[i].get_year()<<setw(2)<<Re[i].get_month()<<setw(2)<<Re[i].get_day()<<endl;
}
outfile.close();
op();
}
void Menu::op()
{
while(1)
{
menu();
cout<<"请输入操作序号:";
int n;
cin>>n;
switch(n)
{
case 1:input_all();break;
case 2:save_tofile();break;
case 3:read_fromfile();break;
case 4:output_all();break;
case 5:search_num();break;
case 6:change_message();break;
case 7:Clean_Message();break;
case 8:order_message();break;
case 9:exit(1);break;
}
}
}
//////////////////////////////////
int main()
{
Menu em;
em.op();
return 0;
}4.2、运行结果
4.3、心得体会
感觉这次的课程设计就像一次小型的复习,在设计中自己学习中的一些记忆不牢固,不清楚的知识点逐一显现,同时又锻炼自己设计程序时的全局观。“我就是程序,程序就是我”希望自己在不断实践中达到如此境界。这次课程设计,通过向别人请教、自己琢磨、向同学解答的形式完成。向别人请教时,不同的思路,不同的见解在交流中交汇,对程序的使用方法的理解更加深刻;自己琢磨时,可以理清自己的设计思路;向同学解答时,锻炼自己对程序专有名词的运用,表达能力。由于,这一学期学的是基础,在自己设计的通讯录管理系统中,总感觉和如今生活中的程序有很大差别,想使自己的程序更完美,却又发现知识有限,从另一方面,激发好奇心,求知欲。
展开阅读全文