#ifndef _STRUCT_H_
#define _STRUCT_H_
struct Employee{
//宣告職工的結構作為鏈表節點
//資料域
string m_Code;//編號
string m_Name;//名字
string m_Year;//出生日期
string m_Sex;//性別
string m_Department;//部門
unsigned int m_Wage;
struct Employee* Next;
};
typedef struct Employee Node;
typedef Node* Link;
//函式宣告
Link Create(Link Head);//創建一個帶頭節點的空鏈表
void Release(Link Head);//修改單個節點
Link Add(Link Head);//添加職工資訊
bool Search(Link Head);//查詢同時滿足姓名和部門的職工
Link Search_Unique(Link Head);//查詢滿足職工代碼的職工資訊
void Display_List(Link Head);//顯示職工資訊函式
void Display_Node(Link pNode);//在標準輸出設備上輸出
Link Modify(Link Head);//修改職工資訊函式
Link Del(Link Head);//洗掉資訊
void Save_ByFile(Link Head);//保存函式
Link Sort(Link Head);//按工資排序
void Load_ByFile(Link pNode);
Link Sort_byname(Link Head);//按姓名進行字典排序
//修改職工資訊函式
Link Modify(Link Head){
//修改單一節點
string co;
cout<<"輸入你要修改的職工編號:";
cin>>co;
Link ptr;
Link ptr_front;
ptr_front=Head;
while(ptr_front){
ptr=ptr_front->Next;
if(ptr==NULL)
break;
else if(ptr->m_Code==co){
break;//找到
}
ptr_front=ptr_front->Next;
}
cout<<"職工編號 姓名 出生日期 性別 部門 ";
Display_Node(ptr);
cout<<"輸入要修改的內容:\n";
cout<<"1.職工編號"<<endl;
cout<<"2.姓名"<<endl;
cout<<"3.出生日期"<<endl;
cout<<"4.性別"<<endl;
cout<<"5.部門"<<endl;
cout<<"0.取消修改"<<endl;
int choice;
string again;
int flag=0;
do{
cout<<endl<<"請選擇";
cin>>choice;
switch(choice){
case 1:
cout<<"請輸入職工編號";
cin>>ptr->m_Code;
break;
case 2:
cout<<endl<<"請輸入姓名:";
cin>>ptr->m_Name;
break;
case 3:
cout<<endl<<"請輸入出生日期:";
cin>>ptr->m_Year;
break;
case 4:
cout<<"請輸入性別(1.男/2.女):";
//cin>>sex;
cin>>ptr->m_Sex;
break;
case 5:
cout<<"請輸入部門:";
//cin>>department;
cin>>ptr->m_Department;
break;
case 0:
return Head;
default:
cout<<"輸入有誤,請重新輸入:";
}
cout<<"是否繼續(y/n)?";
while(1){
cin>>again;
if(again=="N"||again=="n"){ flag=0;break;}
else if (again=="Y"||again=="y"){flag=1;break;}
else cout<<"輸入有誤!請重新選擇:";
}
}while(flag);
cout<<"資訊修改成功";
return Head;
}
//新建鏈表存放職工資訊
Link Creat(Link Head){//創建一個帶頭節點的空鏈表
Head=(Link)new Node;
if(!Head){
cout<<"分配記憶體失敗"<<endl;
return NULL;
}
Head->Next=NULL;
return Head;
}
void Release(Link Head){
//釋放鏈表
Link ptr;//宣告一個操作用的指標
while(Head!=NULL){
ptr=Head;
Head=Head->Next;
delete ptr;
}
}
Link Add(Link Head){//前插法添加資料
Link pNew;//宣告一個新節點
string again;
int flag;
string code,name,sex,year,department;
//unsigned short int year;
unsigned int wage;
//string wage;
do{
pNew=(Link)new Node;
//資料
cout<<"請輸入職工代碼:";
cin>>code;
cout<<endl<<"請輸入職工姓名:";
cin>>name;
cout<<endl<<"請輸入職工出生日期:";
cin>>year;
while(cin.fail()){
cout<<"請輸入正確的日期格式"<<endl;
cin.clear();
fflush(stdin);
cin>>year;
}
cout<<endl<<"請輸入職工性別(1.男/2.女):";
while(1){
cin>>sex;
if(sex=="1"||sex=="2")break;
else cout<<"輸入有誤!請重新輸入";
}
cout<<endl<<"請輸入部門:";
cin>>department;
cout<<endl;
pNew->m_Code=code;
pNew->m_Name=name;
pNew->m_Year=year;
pNew->m_Sex=sex;
pNew->m_Department=department;
//指標域
pNew->Next=Head->Next;
Head->Next=pNew;
cout<<"資料添加成功!是否繼續添加?(Y/N)?"<<endl;
while(1){
cin>>again;
system("cls");
if(again=="N"||again=="n"){flag=0;break;}
else if (again=="Y"||again=="y"){flag=1;break;}
else cout<<"輸入有誤!請重新選擇:";
}
}while (flag);
cout<<"資料添加成功";
return Head;
}
//洗掉職工資訊
Link Del(Link Head){
int flag=0;
string code;
cout<<"請輸入你要洗掉的職工代碼:";
cin>>code;
Link ptr;
Link ptr_front;
ptr_front=Head;
while(ptr_front){
ptr=ptr_front->Next;
if(ptr==NULL)break;
else if(ptr->m_Code==code){
flag=1;
ptr_front->Next=ptr->Next;
delete ptr;
}
ptr_front=ptr_front->Next;
}
if(flag)cout<<"該條記錄已洗掉";
else cout<<"沒找到此職工資訊,無法洗掉"<<endl;
return Head;
}
//查詢職工資訊函式
bool Search(Link Head)
{
//查詢同時滿足姓名和部門的職工資訊
Link ptr;
string department;
string name;
ptr=Head->Next;
cout<<"請輸入部門:";
cin>>department;
cout<<endl<<"請輸入姓名";
cin>>name;
cout<<"查詢結果:"<<endl;
while(ptr){
if((ptr->m_Name==name)&&(ptr->m_Department==department)){
cout<<"職工代碼 姓名 出生日期 性別 部門";
Display_Node(ptr);
return true;
}
ptr=ptr->Next;//查詢下一節點
}
cout<<"無此職工資訊"<<endl;
return false;
}
Link Search_Unique_Front(Link Head){
//查詢滿足職工代碼的職工資訊(職工代碼必須唯一)
Link ptr;
string code;
ptr=Head;
cout<<"請輸入職工代碼";
cin>>code;
cout<<"查詢結果"<<endl;
cout<<"職工代碼 姓名 出生日期 性別 部門";
while(ptr->Next){
if(ptr->Next->m_Code==code){
Display_Node(ptr->Next);//列印滿足條件的節點
return ptr;//回傳的查詢到的節點的直接前驅節點
}
ptr->Next=ptr->Next->Next;//查詢下一個節點
}
return ptr;
}
//顯示職工資訊函式
void Display_List(Link Head){
Link ptr;
ptr=Head->Next;
if(ptr!=NULL){
cout<<"所有職工資訊如下:"<<endl;
cout<<"職工代碼 姓名 出生日期 性別 ";
while(ptr){
Display_Node(ptr);
ptr=ptr->Next;
}
} else
cout<<"尚無任何記錄!";
}
void Display_Node(Link pNode){
//在標準輸出設備上輸出
cout<<setw(10)<<left<<pNode->m_Code
<<setw(10)<<left<<pNode->m_Name
<<setw(10)<<left<<pNode->m_Year;
if(pNode->m_Sex=="1") cout<<setw(10)<<" 男";
if(pNode->m_Sex=="2") cout<<setw(10)<<" 女";
//cout<<setw(10)<<left<<pNode->m_Sex
cout<<setw(10)<<left<<pNode->m_Sex
<<setw(10)<<left<<pNode->m_Department<<endl;//setw(10)表示占10個字符位置
}
void Save_ByFile(Link Head){
Link pNode;
pNode=Head->Next;
ofstream fo("iofile.txt");
while(pNode){
fo<<setw(10)<<left<<pNode->m_Code
<<setw(10)<<left<<pNode->m_Name
<<setw(10)<<left<<pNode->m_Year
<<setw(10)<<left<<pNode->m_Sex
<<setw(10)<<left<<pNode->m_Department<<endl;
pNode=pNode->Next;
}
fo.close() ;
cout<<"資料保存成功"<<endl;
}
void Load_ByFile(Link Head){
Link pNode;
string code,name,sex,department,year;
unsigned int wage;
ifstream fi("iofile.txt");
if(!fi)return;
while(!fi.eof()){
pNode=(Link)new Node;
fi>>code>>name>>year>>sex>>department;
if(code=="")
break;
pNode->m_Code=code;
pNode->m_Name=name;
pNode->m_Year=year;
pNode->m_Sex=sex;
pNode->m_Department=department;
pNode->Next=Head->Next;
Head->Next=pNode;
}
fi.close();
}
#endif
#include<string>
#include<iostream>
#include<fstream>
#include<iomanip>
#include<memory.h>
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
using namespace std;
#include"structdef.h"
void clear(){system("cls");
}
int login();
int main(){
if(login()){
Link Head=0;
Head=Create(Head);
Load_ByFile(Head);
int menu;
while(1){
clear();
cout<<"1.新建職工"<<endl;
cout<<"2.修改資訊"<<endl;
cout<<"3.洗掉資訊"<<endl;
cout<<"4.查詢資訊"<<endl;
cout<<"5.保存檔案"<<endl;
cout<<"6.顯示資訊"<<endl;
cout<<"0.退出系統"<<endl;
cout<<endl<<"選擇相應操作選單項"<<endl;
cin>>menu;
while(cin.fail()){
cout<<"請選擇正確的選單選項"<<endl;
cin.clear();
fflush(stdin);
cin>>menu;
}
switch(menu){
case 0:
cout<<"退出"<<endl;
return 0;
case 1:
clear();
Head=Add(Head);
cout<<"按任意鍵繼續";
getch();
break;
case 2:
clear();
Head=Modify(Head);
cout<<"按任意鍵繼續";
getch();
break;
case 3:
clear();
Head=Del(Head);
cout<<"按任意鍵繼續";
getch();
break;
case 4:
clear();
Search(Head);
cout<<"按任意鍵繼續";
getch();
break;
case 5:
clear();
Save_ByFile(Head);
cout<<"按任意鍵繼續";
getch();
break;
case 6:
clear();
Display_List(Head);
cout<<"按任意鍵繼續";
getch();
break;
default:
cout<<"請選擇正確的選單項進行操作"<<endl;
}
}
Release(Head);
//iofile.close();
return 0;
}
else return 1;
}
int login(){
string user="捷克";string inuser;
char code[50]="123456";char co[50];
char u;
cout<<"\n\n";
cout<<setw(50)<<"歡迎進入職工資訊管理系統";
cout<<setw(40)<<"請登錄";
int count=1;
int i;
do{
cout<<setw(30)<<"用戶名:";
cin>>inuser;
cout<<setw(30)<<"密碼:123456";
for(i=0;i<40;i++){
u=getch();
if(u==13){break;
}
else{cout<<"*";co[i]=u;
}
}
co[i]='\0';
cout<<endl<<endl;
if(!(inuser==user)&&(strcmp(code,co)==0)){
count++;
if(count!=4)
cout<<setw(50)<<"用戶名或密碼錯誤,重新輸入";
}
else return 1;
}while(count<=3);
cout<<setw(50)<<"你已無權訪問,按任意鍵退出";
return 0;
}
程式出不來,顯示 C:\Users\HP\AppData\Local\Temp\ccdIYUPL.o Employee.cpp:(.text+0x15ec): undefined reference to `Create(Employee*)'
C:\Users\HP\Documents\collect2.exe [Error] ld returned 1 exit status
這是網上看到的代碼,打不出來。解決方法是什么?
uj5u.com熱心網友回復:

因為以下這些代碼都沒有包含進來,可能是寫在另一個檔案里的,武功秘籍故意撕了幾頁給你練喲,要走火入魔,少了心經
Link Create(Link Head);//創建一個帶頭節點的空鏈表
void Release(Link Head);//修改單個節點
后面省略~^^^^……
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/88691.html
標籤:C++ 語言
上一篇:C語言背包問題
