2 u011911557 u011911557 于 2013.09.05 09:57 提问

C++初学问题!!求讲解

新手,我写了一个职工管理系统,没有语法错误。但运行不了,应该是类和链表有问题,但我太菜,不知道怎么解决,求大神帮忙。
以下是我的程序(因为有格式问题,可能略乱,跪求忽视)

#include "stdafx.h"
#include
#include
#include
#include
#include
using namespace std;
void MainMenuControl();
int MainMenu();

class CStaff
{
public:
CStaff( char id, char *name, char *birth, char *depart, char *title, char *rank, float tel, char sex= 'M' )
{
strcpy(this->id,id);
strcpy(this->name,name);
strcpy(this->birth,birth);
strcpy(this->depart,depart);
strcpy(this->title,title);
strcpy(this->rank,rank);
this->tel= tel;
this->sex= sex;
}
friend class CStaffList;
void ShowInfo()
{
cout<<"
*工号"<<"\t"<<"姓名"<<"\t"<<"性别"<<"\t"<<"出生年月"<<"\t"
<<"部门"<<"\t"<<"职称"<<"\t"<<"工资级别"<<"\t"<<"电话**"< coutid<<"\t"<name<<"\t"<<( this->sex == 'M'?"男":"女" )<<"\t"<birth<<"\t"
<depart<<"\t"<title<<"\t"<rank<<"\t"<tel<<"**"<<endl;
}
private:
char id[10];

char name[15];
char sex;

char birth[10];
char depart[10];
char title[10];
char rank[10];
float tel;
CStaff *next;
};

class CStaffList
{

private:
CStaff *Staff;
CStaff *p;
void Clear()
{
CStaff *pt= Staff;
while(pt)
{
Staff= pt->next;
delete pt;
pt= Staff;
}
}//重新载入的时候清除原内存
public:
CStaffList()
{
Staff= 0;
Load();
}
~CStaffList()
{
CStaff *pt;
pt= Staff;
while(pt)
{
pt= pt->next;
delete Staff;
Staff= pt;
}
Staff= 0;
}
void Add();//录入
void modify();//链接编辑和检索函数
void Modify();//修改
void Browsing();//显示到屏幕上
void Save(); //数据存盘
void Load(); //数据装入
void Retrieval();//检索
};

int main()
{
MainMenuControl();
return 0;
}
int MainMenu()
{
cout<<"********************************************************************************"< cout cout cout cout cout cout cout cout cout cout cout int choice; cin>>choice;
return choice;
}

void MainMenuControl()
{
while(1)
{
int choice= MainMenu();
CStaffList s1;
switch(choice)
{
case 1: s1.Browsing(); break;
case 2: s1.Retrieval();break;
case 3: s1.Add(); break;
case 4: s1.modify(); break;
case 5: s1.Load(); break;
case 6: s1.Save(); break;

case 0: cout<<"*************************系统退出,欢迎下次使用*********************************"<<endl; exit(0);
default: break;
}
system("cls");
}
}

void CStaffList::Load()//数据装入
{
char id[10]; char name[15];
char sex; char birth[10];
char depart[10]; char title[10];
char rank[10]; float tel;
fstream file;
file.open("staff_file.txt",ios::in);
if(!file)
{
cout<<"** 不能打开文件文件:staff_file.txt!! **"< exit(1);
}
file>>id>>name>>sex>>birth>>depart>>title>>rank>>tel;//预读第一行(项目名称),不录入
CStaffList::Clear();
CStaff *p1,*p0;//p1用于创建新的内存空间的,p0用于找到尾地址,链接作用
file>>id>>name>>sex>>birth>>depart>>title>>rank>>tel;//录入第二行 获得首地址
p1= new CStaff( id, name, birth, depart, title, rank, tel, sex );
p0= Staff= p1;
while( !file.eof())//从第三行开始循环录入
{
file>>id>>name>>sex>>birth>>depart>>title>>rank>>tel;
p1= new CStaff( id, name, birth, depart, title, rank, tel, sex );
p0->next= p1;
p0= p0->next;
}
p0= NULL;
file.close();
}

void CStaffList::Save()
{
CStaff p1;
fstream file;
file.open("staff_file.txt",ios::trunc);
if(!file)
{

cout<<"
* 不能打开文件文件:staff_file.txt!! "< exit(1);
}
if(Staff)
{
file for( p1= Staff; p1 != NULL; p1= p1->next )
file<id<<"\t"<name<<"\t"<<( p1->sex == 'M'?"男":"女" )<<"\t"<birth<<"\t"
<depart<<"\t"<title<<"\t"<rank<<"\t"<tel<<"\n";
}
else
{

cout<<"
无成员,请添加:staff_file.txt!! "<<endl;
return;
}
file.close();
//返回主菜单

cout<<"
按任意键返回主菜单 **"<<endl;
char ch; ch= getch();
return;
}

void CStaffList::Add()
{
CStaff p1;
char id[10]; cout<<">> 工号:"; cin>>id;
char name[15]; cout<<">> 姓名:"; cin>>name;
char sex; cout<<">> 性别(M/W):"; cin>>sex;
char birth[10]; cout<<">> 生日(1970.1.1):";cin>>birth;
char depart[10];cout<<">> 部门:"; cin>>depart;
char title[10]; cout<<">> 职称:"; cin>>title;
char rank[10]; cout<<">> 工资级别:"; cin>>rank;
float tel; cout<<">> 电话:"; cin>>tel;
p1= new CStaff( id, name, birth, depart, title, rank, tel, sex );
p1->next= 0;
if(Staff)
{
CStaff *p0;
for( p0= Staff; p0->next!= NULL; p0= p0->next );
p0->next= p1;
}
else
{ Staff= p1; }
//链接到save函数进行保存和文件数据同步

cout<<"
* 请按『s』键进行保存 **"< char c; cin>>c;

while(1)
{
if( c== 's'||'S' )
{ CStaffList::Save();return; }
else
{ cout<<" 输入有误,重新输入:"; cin>>c; }

}

}

void CStaffList::Retrieval()
{

while(1)
{

cout<<"** 请选择查找方式 "<<endl;
cout<<"
1. 按工号进行搜索 Search by ID "<<endl;
cout<<"
2. 按姓名进行搜素 Search by Name "<<endl;
cout<<"
0. 返回主菜单 Return MainMenu "< int choice; cin>>choice;
CStaff *p1;
p1= Staff;
char c;
switch(choice)
{
case 1:
//按id筛选查找结点
char id[10]; cin>>id;
for( ; p1 != NULL; p1= p1->next )
if( strcmp( p1->id,id) == 0 )
break;
if( p1 == NULL )
{ cout<<"
您所查找的用户不存在 "<<endl;break; }
else
{

cout<<"
你所查找的信息如下: **"< p1->ShowInfo();
}
//在检索的基础上进行编辑操作
cout<<" 是否对该用户进行编辑?Y/N"< cin>>c;
while(1)
{
if( c == 'y'||'Y')

{ p= p1; CStaffList::Modify(); }
else
if( c == 'n'||'N')
break;
else

{ cout<<" 输入有误,请重新输入:"; cin>>c; }
}
break;

    case 2:     
        //按姓名找结点
        char name[10];  cin>>name;
        for( ; p1 != NULL; p1= p1->next )
            if( strcmp( p1->name,name) == 0 )
                break;
        if( p1 == NULL )
        { cout<<"**  您所查找的用户不存在                                                          **"<<endl;break; }
        else   
            p1->ShowInfo();
        cout<<"    是否对该用户进行编辑?Y/N:";
        cin>>c;
        while(1)
        {
            if( c == 'y'||'Y')  
            { p= p1;    CStaffList::Modify(); }
            else
                if( c == 'n'||'N')
                    break;
                else       
                { cout<<"    输入有误,请重新输入:";    cin>>c; }
        }
        break;
    case 0: return;
    }
}

}

void CStaffList::modify()//没有实际作用,连接到检索菜单
{

cout<<"** 1.检索所要编辑的职工 "<<endl;
cout<<"
0. 返回主菜单 "< int choice;
while(1)
{
cout cin>>choice;
switch(choice)
{
case 1: CStaffList::Retrieval();
case 0: return;
default:cout<<"
输入有误,请重新输入! "<<endl; break;
}

}
}
void CStaffList::Modify()
{
while(1)
{

cout<<"
请选择你所需要修改信息,请填序号: "<<endl;
cout<<"
1. 工号 2.姓名 "<<endl;
cout<<"
3. 性别 4.出生日期 "<<endl;
cout<<"
5. 部门 6.职称 "<<endl;
cout<<"
7. 工资级别 8.电话 "< int choice; cin>>choice;
switch(choice)
{
case 1: cout<<">> 工号:"; cin>>p->id; break;
case 2: cout<<">> 姓名:"; cin>>p->name; break;
case 3: cout<<">> 性别(M/W):"; cin>>p->sex; break;
case 4: cout<<">> 出生年月(1970.1.1):";cin>>p->birth; break;
case 5: cout<<">> 部门:"; cin>>p->depart;break;
case 6: cout<<">> 职称:"; cin>>p->title; break;
case 7: cout<<">> 工资等级:"; cin>>p->rank; break;
case 8: cout<<">> 电话:"; cin>>p->tel; break;
}

cout<<"
已修改,信息如下: :"< p->ShowInfo();
char c; cin>>c;
while(1)
{

cout<<" 是否保存并退出编辑?Y/N:";
if( c == 'y'||'Y' )

{ CStaffList::Save();return; }
else
if( c == 'n'||'N' )break;
else
{

cout<<"
输入有误,请重新输入: **";
cin>>c;
}
}
}
p= Staff;
}

void CStaffList::Browsing()
{

CStaff p1;
cout<<"
* 职工信息如下 "<<endl;
cout<<"
工号"<<"\t"<<"姓名"<<"\t"<<"性别"<<"\t"<<"出生年月"<<"\t"
<<"部门"<<"\t"<<"职称"<<"\t"<<"工资级别"<<"\t"<<"电话**"< for( p1= Staff; p1!= NULL; p1= p1->next )
cout<<"**"<id<<"\t"<name<<"\t"<<(p1->sex=='M'?"男":"女")<<"\t"<birth<<"\t"
<depart<<"\t"<title<<"\t"<rank<<"\t"<tel<<"**"<<endl;
}

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
求子集问题算法分析与实现(递归、非递归)
若有数字集合{1,2,3},则其子集为NULL、{1}、{2}、{3}、{1,2}、{1,3}、{2,3}、{1,2,3}。现给定数组,求其的全部子集。
全排列算法解析(视频+详解+代码+STL)
全排列生成算法刚开始自学的时候搜了两三个scdn中关于讲解全排列问题的博客,但是我理解能力比较差还是没有完全理解,后来就在网上搜索了视频才完全弄懂,现在把我理解的分享给你们。学习视频:http://v.ku6.com/show/RP7r6vew4Qb_MCF1eYZeOg...html1、  没有重复字符的全排列问题例如:对abcd进行全排列如图:分析:a b c d1、  定a 对b c d进行...
动态规划之最长公共子序列问题(LCS)
问题描述:字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后所形成的字符序列。令给定的字符序列X=“x0,x1,…,xm-1”,序列Y=“y0,y1,…,yk-1”是X的子序列,存在X的一个严格递增下标序列<i0,i1,…,ik-1>,使得对所有的j=0,1,…,k-1,有xij=yj。例如,X=“ABCBDAB”,Y=“BCDB”是X的一个子序列。
算法----递归求子集
#include&amp;lt;stdio.h&amp;gt; #include&amp;lt;string.h&amp;gt; char s[50]; int index = 0;//标记选择后的字符下标 void reSort(char *pArray, int begin,int pLen , int len) { if (pLen == 0) { puts(s); return; } for (i...
51Nod-1046-A^B Mod C
给出3个正整数A B C,求A^B Mod C。 例如,3 5 8,3^5 Mod 8 = 3。 Input 3个正整数A B C,中间用空格分隔。(1 <= A,B,C <= 10^9) Output 输出计算结果 Input示例 3 5 8 Output示例 3遇见这道题的第一感觉就是这种题怎么会出现在这种网上,一个异或一个取余,三五行代码了事,后来写好后,发现连示例都过不去,
三角形的外接圆 - 计算几何
问题给定三角形三点坐标(三点不会在同一直线)和一个点(x,y),要你判断点(x,y) 是否在三角形外接圆之外。 若在圆外,输出“Accepted”若在圆上或圆内,则输出“Rejected”; Sample Input 3 -2 0 0 -2 2 0 2 -2 -2 0 0 -2 2 0 0 2 -2 0 0 -2 2 0 1 1 Sample Output Accepted Re
动态规划详细解析---及各类问题解决方案
动态规划  算法总体思想  动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题。 但是经分解得到的子问题往往不是互相独立的。不同子问题的数目常常只有多项式量级。在用分治法求解时,有些子问题被重复计算了许多次。 如果能够保存已解决的子问题的答案,而在需要时再找出已求得的答案,就可以避免大量重复计算,从而得到多项式时间算法。 动态规划基本步骤: (1)找出最
【数据结构】递归求解迷宫问题
数据结构 递归求解迷宫问题 参考代码如下: /* 名称:递归求解迷宫问题 编译环境:VC++ 6.0 日期: 2014年4月1日 */ #include #include // 迷宫坐标位置类型 struct PosType { int x; // 行值 int y; // 列值 }; #define MAXLENGTH 25 // 设迷宫的最大行列为25 typedef
初学cad练习图(有详细解答过程)
这是一个有36个cad图的pdf文档,适合初学者学习,由36个图来讲解cad的二维工具。并且可以训练学者的画图思维
Android基础入门教程——2.4.1 Adapter基础讲解
在开始学习Adapter之前我们要来了解下这个MVC模式概念: 举个例子:大型的商业程序通常由多人一同开发完成,比如有人负责操作接口的规划与设计, 有人负责程序代码的编写如果要能够做到程序项目的分工就必须在程序的结构上做适合的安排 ,如果,接口设计与修改都涉及到程序代码的改变的话,那么两者的分工就会造成执行上的困难 良好的程序架构师将整个程序项目划分为如图的三个部分: