一个c++问题 30

编写一个人员管理系统。要求:1、添加用户的功能。2、查找某个用户的功能。3、删除某个用户的功能。4、显示某个用户的功能5、保存所有用户在文件上的功能。6、打开文件获取用户... 编写一个人员管理系统。要求:
1、添加用户的功能。
2、查找某个用户的功能。
3、删除某个用户的功能。
4、显示某个用户的功能
5、保存所有用户在文件上的功能。
6、打开文件获取用户的功能。
7、退出程序的功能。

完成步骤:
1.用户类(包括日期类)
2.用户管理类(用数组或链表存储用户,并完成上述除退出外,6种功能)
3.用户程序主函数
有谁可以把代码写给我吗?老实说我们已经教了类,但是什么链表是没有教的,具体像这种类型的题目,你们所说的模板我是不知道的,也从来没有听说过,当然在网上有看到过,不过还是希望得到你们的帮助,如果有解释就更好啦。
展开
 我来答
百度网友699a4df
2010-07-26 · TA获得超过1375个赞
知道小有建树答主
回答量:1079
采纳率:0%
帮助的人:359万
展开全部
看一下这个吧,希望对你又帮助,
// 要求,定义三个类和一个链表类,其中一个链表类的每一个节点包含的数据位前三个类某一种对象成员,且链表中的节点按照姓名的次序进行排列
// 引入抽象类作为一个通用接口,完成
#include "iostream"
using namespace std;
#include "string"
class Cperson{
friend class Clist;// 定义抽象类,然后把Clist声明为该类的友元类
protected:
char name[20];
int age;
char add[20];
char tele[20];
static Cperson *ptr;//指向该类对象的静态对象指针,因为是保护成员,所以能被其子类用到的,
Cperson *next;// 指向下一个对象
public:
Cperson(char *,int ,char *,char*);
virtual void print();
virtual void insert()=0;//定义纯虚函数
};
class Cstudent :public Cperson
{
friend class Clist;
int level;//班级
float grede_point_average;// 平均成绩
public:
Cstudent(char *,int ,char*,char *,int ,float);
void print();
void insert();
};
class Cteacher:public Cperson
{ friend class Clist;
float salary;
public:
Cteacher(char *,int ,char*,char *,float );
void print();
void insert();
};
class Cstaff:public Cperson
{
friend class Clist;
float hourly_wages;
public:
Cstaff(char *,int ,char *,char *,float);
void print();
void insert();
};
// 开始定义异质链表类
class Clist
{
Cperson *root;
public:
Clist(){root=0;}
void insert_person(Cperson *node);// 开始插入,定义一个通用接口
void remove(char *name);
void print_list();
void found(char *name);// 这个查找函数,加上去的,
};
Cperson::Cperson(char *name,int age,char *add,char *tele)
{
strcpy(Cperson::name,name);
strcpy(Cperson::add,add);
strcpy(Cperson::tele,tele);
Cperson::age=age;
next=0; // 初始化
}

void Cperson::print()
{
cout<<"\n Name: "<<name<<endl;
cout<<endl<<" Age: "<<age<<endl;
cout<<endl<<" Address: "<<add<<endl;
cout<<"Telephone number :"<<tele<<endl;
}
Cstudent::Cstudent(char *name,int age,char *add,char *tele,int level,float grede_point_average):Cperson(name,age,add,tele)
{
Cstudent::level=level;
Cstudent::grede_point_average=grede_point_average; // 开始输出乱码的原因是我的上面的字母和下面的不一样,,,,,咳,,超级无语了
}
void Cstudent::print()
{
Cperson::print();
cout<<"Grade point average :"<<grede_point_average<<endl;
cout<<" leved: "<<level<<endl;
}
void Cstudent::insert()
{
ptr=new Cstudent(name,age,add,tele,level,grede_point_average);
}
Cteacher::Cteacher(char *name,int age,char *add,char *tele,float salary):Cperson(name,age,add,tele)
{ Cteacher::salary=salary;}
void Cteacher::print()
{
Cperson::print();
cout<<" Salary: "<<salary<<endl;
}
void Cteacher::insert()
{
ptr=new Cteacher(name,age,add,tele,salary);
}
Cstaff::Cstaff(char *name,int age,char *add,char *tele,float hourly_wages):Cperson(name,age,add,tele)
{
Cstaff::hourly_wages=hourly_wages;
}
void Cstaff::print()
{
Cperson::print();
cout<<" Hourly_wages :"<<hourly_wages<<endl;
}
void Cstaff::insert()
{
ptr=new Cstaff(name,age,add,tele, hourly_wages);
}
void Clist::insert_person(Cperson *node)
{
char key[20];
strcpy(key,node->name);// 将插入对象的姓名赋给变量key
Cperson *curr_node=root;
Cperson *previous=0;
while(curr_node!=0&&strcmp(curr_node->name,key)<0)
{
// 这个是排列姓名的过程的例子
previous=curr_node;
curr_node=curr_node->next;
}
node->insert();// 调用insert函数其实此时是动态调用的,注意此时是在调用ptr
node->ptr->next=curr_node;// 吧ptr插入到链表中去
if(previous==0)// 注意此时的特殊情况,如果是null,那么插入到表头,
root=node->ptr;
else
previous->next=node->ptr;
}
void Clist::remove(char *name)
{
Cperson *curr_node=root;
Cperson *previous=0;
while(curr_node!=0&&strcmp(curr_node->name,name)!=0)
{
previous=curr_node;
curr_node=curr_node->next;
}
if(curr_node!=0&&previous==0)
{
root=curr_node->next;
delete curr_node;
}
else if( curr_node!=0&&previous!=0)
{
previous->next=curr_node->next;
delete curr_node;
}
}
void Add(Cperson &me)// 定义一个外部函数,但是能够获得类和子类的某些信息通过对象
{
me.print();
}
void Clist::found(char *name)// 寻找函数,期间出了指针问题
{
Cperson *curr=root;
while(curr!=0&&strcmp(curr->name,name)!=0)// 注意此时必须有一个问题就是判断问体,在这if语句的地方,否则会导致不能为read
// 因为找不到的情况下,那么curr会再次进行nexe,0==anyone,
curr=curr->next;
if(curr!=0&&strcmp(curr->name,name)==0)
{
cout<<"找到了信息了"<<endl;
Add(*curr);
}
else
cout<<"没有找到"<<endl;
}

void Clist::print_list()
{
Cperson *curr=root;
while(curr!=0)
{
curr->print();
cout<<"***************************************";
curr=curr->next;
}
}
Cperson *Cperson::ptr=0;
void main()
{
Clist people;
Cstudent str("焕庭",21,"山东","2665658",3,80.3);
Cteacher tea("海飞丝",26,"河南","2666666",344.3);
Cstaff sta("里里",23,"河南","3434343434",23.3);
people.insert_person(&str);
people.insert_person(&tea);
people.insert_person(&sta);
people.print_list();
// people.found("焕庭");
people.found("焕庭2");

cout<<endl<<"开始删除了"<<endl;

people.remove("焕庭");
people.print_list();
}

下面是你说的是怎样实现具体的功能的,一个链表

// 现在的任务就是把这个图书馆书籍登记系统改成用类的实现形式,然后利用各种函数完成
// 如利用友元函数,引用函数来修改 数据
#include <iostream>
using namespace std;
#define NULL 0
#define Alarm cout<<'\a';
typedef struct E_Book //定义一个结构体,然后完成下面的类的定义
{
char Book_Num[20];
char Book_Name[20];
char Book_Time[20];
float Book_Price;
struct E_Book *B_front,*B_back;//注意这个B_front是一个前序指针,而后面的这个是一个后序指针
}*I_Book,I_book;
class IN_Book// 定义一个Book的信息类
{
I_Book H_,S_,R_ ;//分别定义三个作为节点表示头结点,新节点,以及尾节点
public:
//在这里调用系统默认的构造函数就行了因为此时不涉及new开辟空间
IN_Book(){ };
I_Book Creat();
void Out_Book(I_Book);// 此处省略了参数
void Destory(I_Book head);
friend void GET_DATA();//返回值为一个结构体类型
};
void Copy()
{
cout<<"作者 刘焕庭 河南商专高等专科学校,网络技术一班"<<endl;
}
void GET_DATA(I_Book Head )
{ char BName[20];
I_Book p;
//p=new I_book;
cout<<"\n 请输入你要查询的书的名字\n";
cin>>BName;
if(Head==0)
cout<<"空表"<<endl;
else
{ p=Head;//用p表示head
while(p!=0&&strcmp(p->Book_Name,BName)!=0)
p=p->B_back;
if(p!=0&&strcmp(p->Book_Name,BName)==0)
cout<<"找到了书了,这个书的信息为"<<"编号"<<p->Book_Num<<"书名"<<p->Book_Name<<"书的日期"<<p->Book_Time<<"书的价格,RMB"<<p->Book_Price<<"元"<<endl;
else
cout<<" 没有找到你的书籍信息\n";
}
}
I_Book IN_Book::Creat()
{
if((R_=S_=new I_book)==0)
{
cout<<"空间分配失败,请重新分配"<<endl;
}
else
cout<<"开始数据书籍信息\n";

cin>>S_->Book_Num>>S_->Book_Name>>S_->Book_Time>>S_->Book_Price;
S_->B_front=S_->B_back=0;//为这个链表的链赋为零

H_=S_;
getchar();
//while(S_->Book_Num!="停止")
while(strcmp(S_->Book_Num,"0")!=0)//必须这个样子,上面的是不正确的那,因为
//这个是设计了字符串的比较的额,所以要用strcmy函数,而通过别的方法,
//如直接比较的方法是不正确的,

{
R_->B_back=S_;
S_->B_front=R_;
R_=S_;
S_=new I_book;
S_->B_front=0;
R_->B_back=0;
// Take(S_);
cout<<"开始输入下一个书的记录\n";
cin>>S_->Book_Num>>S_->Book_Name>>S_->Book_Time>>S_->Book_Price;
getchar();
}
R_->B_back=0;
S_->B_front=R_;
return H_;
}
void IN_Book::Out_Book(I_Book head)
{I_Book p;
if(head!=NULL)
{
p=head;
do
{
cout<<p-> Book_Num<<" "<<p->Book_Name<<" "<<p->Book_Time<<'\n';
p=p->B_front;
}while(p!=NULL);
}
else
cout<<"空343434表"<<endl;
}
void IN_Book::Destory(I_Book head)
{
I_Book p;
while(head!=0)
{
p=head;
head=head->B_front;
delete p;
cout<<"销毁了元素\t";
}
}
void main()
{
IN_Book List_Book;//调用了默认的构造函数
I_Book head;
int i;cout<<"***请输入你的工作***\n\a*** 1 建立书籍信息 ***\n ***2 输出已经输入的信息 ***\n*** 3 销毁全部的输入的信息***\n ***4 退出图书程序***\n ***5 查看作者***\n 6 查找书的信息***\n"<<endl;
while(1)
{
E: cout<<"\n请输入选项\n"<<endl;
cin>>i;
if(i<=0||i>6)
{ cout<<"输入越界"<<endl;
goto E;
}
switch(i)
{
case 1: Alarm head=List_Book.Creat();break;
case 2: Alarm List_Book.Out_Book(head);break;
case 3: Alarm List_Book.Destory(head); break;
case 4: Alarm cout<<"结束了\n";exit(0);break;
case 5:Alarm Copy();break;
case 6: Alarm GET_DATA(head);break;

}
}

}
xsyhzhb1991
2010-07-21 · TA获得超过1.4万个赞
知道大有可为答主
回答量:5125
采纳率:75%
帮助的人:8892万
展开全部
用户类把需要的数据写进去就可以了。
其余功能使用链模板可以轻松解决,因为模板就封装了保存、打开以及对链节点的添加、查找、删除、显示功能。
链模板自己写写吧,写好存着终身都可以直接调用的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lbjfeng
2010-07-21 · TA获得超过184个赞
知道答主
回答量:107
采纳率:0%
帮助的人:43.2万
展开全部
csdn上有这样的源码,自己去找找吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
棋疵
2010-07-21
知道答主
回答量:20
采纳率:0%
帮助的人:11.6万
展开全部
有模板的。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友71b810fe7
2010-08-03 · TA获得超过509个赞
知道小有建树答主
回答量:510
采纳率:100%
帮助的人:356万
展开全部
貌似有点麻烦呀。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式