當前位置:首頁 » 軟體設計 » 數據結構課程設計

數據結構課程設計

發布時間: 2020-11-22 03:24:20

⑴ 數據結構課程設計的需求分析怎麼寫

一 需求分析:
在該部分中根據設計題目的要求,充分地分析和理解問題版,敘述系權統的功能要求,明確問題要求做什麼?以及限制條件是什麼?
1.1問題描述
1.2基本要求
(1) 輸入的形式和輸入值的范圍;
(2) 輸出的形式;
(3) 程序所能達到的功能;

二 概要設計
說明本程序中用到的所有抽象數據類型的定義。主程序的流程以及各程序模塊之間的層次(調用)關系。
1、 數據結構
2、 程序模塊
3、各模塊之間的調用關系以及演算法設計
三 詳細設計
實現概要設計中定義的所有數據類型,對每個操作寫出偽碼演算法;對主程序和其他模塊也都需要寫出偽碼演算法(偽碼演算法達到的詳細程度建議為:按照偽碼演算法可以在計算機鍵盤直接輸入高級程序設計語言程序);寫出出函數和過程的調用關系.
四 測試與分析
測試數據,輸出測試的結果,這里的測試數據應該完整和嚴格。並對結果進行分析。
五 總結
總結可以包括 : 課程設計過程的收獲、遇到問題、遇到問題解決問題過程的思考、程序調試能力的思考、對數據結構這門課程的思考、在課程設計過程中對《數據結構》課程的認識等內容。

⑵ 數據結構課程設計

#include "stdio.h"
#include "time.h"
#define MAXNUM 5 //停車場車位數
#define PRICE 2.0 //每小時收費
typedef struct car //定義車的結構體
{
char num[10]; //車牌號(最多10個位元組)
struct tm intime; //進入時間
struct tm outtime; //離開時間
int expense; //費用
int length; //停車時長
int position; //停車位
}CAR;
typedef struct //棧結構
{
CAR car[MAXNUM]; //車輛信息
int top; //棧頂指針
} SeqStack;
void StackInit(SeqStack * s) //初始化棧
{
s->top = -1;
}
int StackIsEmpty(SeqStack * s) //判斷棧是否為空
{
if (s->top == -1)
return 1;
else
return 0;
}
int StackIsFull(SeqStack *s) //判斷棧是否為滿
{
if (s->top == MAXNUM - 1)
return 1;
else
return 0;
}
void StackPush(SeqStack *s, CAR car) // 進棧
{
if (!StackIsFull(s)) //若棧未滿
{
s->top++; //修改棧頂指針
s->car[s->top] = car; //將車輛信息入棧
}
}
CAR StackPop(SeqStack *s) //出棧
{
CAR car;
if (s->top != -1) //棧不為空
{
car = s->car[s->top];
s->top--;
return car;
}
}
CAR StackGetTop(SeqStack * s) //取棧頂元素
{
CAR car;
if (s->top != -1)
{
car = s->car[s->top];
return car;
}

}
//隊列鏈表
typedef struct carnode //定義鏈隊列的節點
{
CAR data;
struct carnode *next;
}CarNodeType;
typedef struct //鏈隊列
{
CarNodeType *head; //頭指針
CarNodeType *rear; //尾指針
}CarChainQueue;
void ChainQueueInit(CarChainQueue * q) //初始化鏈隊列接點性質
{
if(!(q->head = (CarNodeType *) malloc(sizeof(CarNodeType))))
{
printf("內存分配失敗!\n");
exit(0);
}
q->rear = q->head; //頭尾指針相同
q->head->next = NULL; //頭尾指針後下一個節點為空
q->rear->next = NULL;
}
void ChainQueueIn(CarChainQueue * q, CAR car) //入隊列
{
CarNodeType *p;
if(!(p = (CarNodeType *) malloc(sizeof(CarNodeType))))
{
printf("內存分配失敗!\n");
exit(0);
}
p->data = car;
p->next = NULL;
q->rear->next = p;
q->rear = p;
}
CAR ChainQueueOut(CarChainQueue * q) //出隊列
{
CarNodeType *p;
CAR car;
if (q->head != q->rear)
{
p = q->head->next;
if (p->next == NULL)
{
car = p->data;
q->rear = q->head;
free(p);
} else
{
q->head->next = p->next;
car = p->data;
free(p);
}
return car;
}

}
int ChainQueueIsEmpty(CarChainQueue * q) //判斷鏈隊列是否為空
{
if (q->rear == q->head) //若隊首等於列尾
return 1; //返回空
else
return 0; //返回非空

}
void separator(int n,char ch,char newline) //輸出多個字元
{
int i;
for(i=0;i<n;i++)
printf("%c",ch);
if(newline==1)
printf("\n");
}
void PrintDate(struct tm gm_date)
{
printf("%d/%d %02d:%02d:%02d\n", gm_date.tm_mon,gm_date.tm_mday,gm_date.tm_hour+8, gm_date.tm_min, gm_date.tm_sec);
}
void ShowPark(SeqStack *s) //查看車位狀態
{
int i;
struct tm gm_date;
printf("\n車位使用情況\n");
separator(40,'_',1);
if (StackIsEmpty(s)) //若棧是空
printf("停車場內已沒有車輛!\n");
else
{
printf("位置\t車牌號\t進站時間\n");
for (i = 0; i <= s->top; i++)
{
printf("%d\t", s->car[i].position);
printf("%s\t", s->car[i].num);
PrintDate(s->car[i].intime); //輸出日期
}
printf("\t\t\t共%d輛", s->top + 1);
if (s->top == MAXNUM - 1)
printf("(已滿)\n");
else
printf("(還可停放放%d輛)\n", MAXNUM - 1 - s->top);
printf("\n");
}
separator(40,'_',1);
}
void ShowAisle(CarChainQueue * q)//顯示過道上車輛的情況
{
if (!ChainQueueIsEmpty(q)) //若隊列不為空
{
CarNodeType *p;
p = q->head->next; //隊列中的第1輛車
printf("\n\n過道使用情況\n");
separator(30,'_',1);
printf("車牌\t進入時間\n");
while (p!= NULL) //隊列不為空
{
printf("%s\t", p->data.num);
PrintDate(p->data.intime);; //顯示該輛車的信息
p = p->next; //下一輛
}
} else
printf("\n過道上沒有車在等待\n");
separator(30,'_',1);
printf("\n\n");
}
void ShowAll(SeqStack *s, CarChainQueue *q) //查看車位和過道使用情況
{
ShowPark(s); //顯示車位使用情況
ShowAisle(q); //顯示過道使用情況
}
void InPark(SeqStack * s, CarChainQueue * q) //車輛進入停車場
{
CAR car;
struct tm *gm_date;
time_t seconds;
time(&seconds);
gm_date = gmtime(&seconds);;

printf("\n車牌號:");
scanf("%s",&car.num);
car.intime=*gm_date; //進入停車場的時間

if (!StackIsFull(s) && ChainQueueIsEmpty(q)) //如果車位未占完,且過道上沒有車
{
car.position = (s->top) + 2; //車位號
StackPush(s, car); //車輛直接進入車位
ShowPark(s); //輸出現在停車場的情況
}
else if (StackIsFull(s) || !ChainQueueIsEmpty(q)) //如果車位已滿,過道上還有車,則必須放在過道上
{
printf("提示:車位滿,只有先停放在過道中。\n");
car.position = MAXNUM;
ChainQueueIn(q, car); //停放在過道

ShowPark(s); //顯示車位的情況
ShowAisle(q); //輸出過道上的情況
}
}
void PrintRate(CAR *car) //離開時輸出費用等情況
{
printf("\n\n 賬單\n" );
separator(30,'_',1);
printf("車牌:%s\n", car->num);
printf("停車位置:%d\n", car->position);
printf("進入時間:");
PrintDate(car->intime);
printf("離開時間:");
PrintDate(car->outtime);
printf("停車時間(秒):%d\n", car->length);
printf("費用(元):%d\n", car->expense);
separator(30,'_',1);
printf("\n\n");
}
void OutPark(SeqStack *s, CarChainQueue *q) //車出站出當時過道上的情況放在過道上直接進入車站
{
struct tm *gm_date;
time_t seconds;

SeqStack p; //申請臨時放車的地方
StackInit(&p);
char nowtime[10];
int i, pos;
CAR car;

if (StackIsEmpty(s)) //如果車位中沒有車輛停放
{
printf("所有車位都為空,沒有車輛需要離開!\n");
}
else
{
printf("現在車位使用情況是:\n");
ShowPark(s); //輸出車位使用情況
printf("哪個車位的車輛要離開:");
scanf("%d", &pos);
if (pos > 0 && pos <= s->top + 1) //輸入車位號正確
{
for (i = s->top + 1; i > pos; i--) //在將pos車位之後停的車放入臨時棧,以使pos車位的車出來
{
car = StackPop(s); //出棧
car.position = car.position - 1;//修改車位號
StackPush(&p, car); //將車輛放入臨時棧
}
car = StackPop(s); //將位於pos車位的車輛出棧
time(&seconds);
gm_date = gmtime(&seconds); //獲取當前時間
car.outtime=*gm_date;//離開時間
car.length=mktime(&car.outtime)-mktime(&car.intime); //停車場中停放時間
car.expense=(car.length/3600+1)*PRICE; //費用
PrintRate(&car); //輸出車出站時的情況---進入時間,出站時間,原來位置,花的費用等
while (!StackIsEmpty(&p)) //將臨時棧中的車重新進入車位
{
car = StackPop(&p); //從臨時棧中取出一輛車
StackPush(s, car); //將車進入車位
}
while(!StackIsFull(s) && !ChainQueueIsEmpty(q)) //如果車位未滿, 且過道上還有車
{
car = ChainQueueOut(q); //將最先停在過道中的車輛進入車位
time(&seconds);
gm_date = gmtime(&seconds); //獲取當前時間
car.intime = *gm_date;//保存進入車位的時間
StackPush(s, car); //將車輛進入車位
}
}
else //車位號輸入錯誤
{
printf("車位號輸入錯誤,或該車位沒有車輛!\n");
}
}
}
int main()
{
SeqStack Park; //停車場棧
CarChainQueue Aisle; //過道鏈表
StackInit(&Park);
ChainQueueInit(&Aisle);
char choice;
do{
printf("\n\n");
separator(10,' ',0);
printf("停車場管理\n");
separator(30,'_',1);
printf("1.車輛進入\n");
printf("2.車輛離開\n");
printf("3.查看停車場情況\n");
printf("0.退出系統\n");
separator(56,'_',1);
printf("提示:本停車場有%d個車位,車位停滿後的車輛將停放在過道上。\n",MAXNUM);
printf("本停車場時計費,收費標准:%.2f元/小時,過道上不收費。\n\n",PRICE);
printf("\n選擇操作(0~3):");
fflush(stdin);
choice=getchar();
switch (choice)
{
case '1': //車輛進入
InPark(&Park,&Aisle);
break;
case '2': //車輛離開
OutPark(&Park,&Aisle);
break;
case '3':
ShowAll(&Park,&Aisle);
break;
}
}while(choice!='0');
return 0;
}

⑶ 數據結構課程設計(C語言)

我這個和你要的差不多吧,,我做實驗用的..筆視收費

#include <iostream>
#include <string.h>
#include <string> //字元串操作
#include <iomanip>
using namespace std;
#define N 50 //學生數
#define M 10 //課程數
struct student
{ char name[20];
int number;
int score[8];
}stu[60];
string kechengming[M];

void changesort(struct student a[],int n,int j)
{int flag=1,i;
struct student temp;
while(flag)
{flag=0;
for(i=1;i<n-1;i+=2)
if(a[i].score[j]<a[i+1].score[j]) /*奇數項比較*/
{temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
flag=1;
}
for(i=0;i<n-1;i+=2)
if(a[i].score[j]<a[i+1].score[j]) /*偶數項比較*/
{temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
flag=1;
}
}
}

void print(struct student a[],int n,int j)
{
int i,k;
cout<<kechengming[j]<<"前5名數據如下:"<<endl;
cout<<setw(8)<<"名次"<<setw(8)<<"學號"<<setw(8)<<"姓名"<<setw(8)<<kechengming[j]<<endl;
k=1;
for(i=0;k<=5 && i<n;i++)
{if(i>0 && a[i].score[j]!=a[i-1].score[j])
k++;
cout<<setw(8)<<k;
cout<<setw(8)<<a[i].number;
cout<<setw(8)<<a[i].name;
cout<<setw(8)<<a[i].score[j];
cout<<endl;
}
}

int main()
{
int i,j,k,n,m;
struct student temp;
cout<<"請輸入學生數(最多為"<<N<<"個):";
cin>>n;
cout<<"請輸入課程數(最多為"<<M-2<<"個):";
cin>>m;
kechengming[m]="sum";kechengming[m+1]="avg";
for(i=0;i<m;i++)
{cout<<"請輸入第"<<i+1<<"個課程名:";
cin>>kechengming[i]; //輸入課程名
}
for(i=0;i<n;i++)
{cout<<"請輸入第"<<i+1<<"個同學的姓名:";
cin>>stu[i].name;
cout<<"請輸入第"<<i+1<<"個同學的學號:";
cin>>stu[i].number;
for(j=0;j<m;j++)
{cout<<"請輸入"<<kechengming[j]<<"的成績:";
cin>>stu[i].score[j];
}
}
for(i=0;i<n;i++)
{stu[i].score[m]=0;
for(j=0;j<m;j++)
stu[i].score[m]+=stu[i].score[j];
stu[i].score[m+1]=stu[i].score[m]/m;
}
changesort(stu,n,m);
cout<<"學生成績如下:"<<endl;
cout<<setw(6)<<"名次";
cout<<setw(6)<<"姓名";
cout<<setw(6)<<"學號";
for(i=0;i<m+2;i++)
cout<<setw(6)<<kechengming[i];
cout<<endl;
k=1;
for(i=0;i<n;i++)
{if(i>0 && stu[i].score[m]!=stu[i-1].score[m])
k++;
cout<<setw(6)<<k;
cout<<setw(6)<<stu[i].name;
cout<<setw(6)<<stu[i].number;
for(j=0;j<m+2;j++)
cout<<setw(6)<<stu[i].score[j];
cout<<endl;
}
j=0;
cout<<"請輸入您要對第幾個成績進行排序(1~"<<m<<"):";
cin>>i;
while(i>=0 && j==0)
{ if(i>0 && i<m+1)
{
changesort(stu,n,i-1);
print(stu,n,i-1);
cout<<"請輸入您要對第幾個成績進行排序:(1~"<<m<<",輸入0退出)";
cin>>i;
}
else if(i==0)
j=1;

else
{cout<<"輸入有誤,請重新輸入:";
cin>>i;
}
}

return 0;
}

⑷ 跪求數據結構課程設計(C語言版)代碼,感激不盡

在C語言中,結構體(struct)指的是一種數據結構,是C語言中聚合數據類型(aggregate data type)的一類。結構體可以被聲明為變數、指針或數組等,用以實現較復雜的數據結構。結構體同時也是一些元素的集合,這些元素稱為結構體的成員(member),且這些成員可以為不同的類型,成員一般用名字訪問。[1]
定義與聲明
結構體的定義如下所示,struct為結構體關鍵字,tag為結構體的標志,member-list為結構體成員列表,其必須列出其所有成員;variable-list為此結構體聲明的變數。[1]
struct tag {
member-list
} variable-list ;

在一般情況下,tag、member-list、variable-list這3部分至少要出現2個。以下為示例:[1]
//此聲明聲明了擁有3個成員的結構體,分別為整型的a,字元型的b和雙精度的c
//同時又聲明了結構體變數s1
//這個結構體並沒有標明其標簽

struct {

int a;

char b;

double c;

} s1;

//同上聲明了擁有3個成員的結構體,分別為整型的a,字元型的b和雙精度的c
//結構體的標簽被命名為SIMPLE,沒有聲明變數
struct SIMPLE{

int a;

char b;

double c;

};

//用SIMPLE標簽的結構體,另外聲明了變數t1、t2、t3
struct SIMPLE t1, t2[20], *t3;
//也可以用typedef創建新類型
typedef struct{
int a;
char b;
double c;
} Simple2;
//現在可以用Simple2作為類型聲明新的結構體變數
Simple2 u1, u2[20], *u3;

在上面的聲明中,第一個和第二聲明被編譯器當作兩個完全不同的類型,即使他們的成員列表是一樣的,如果令t3=&s1,則是非法的。[1]
結構體的成員可以包含其他結構體,也可以包含指向自己結構體類型的指針,而通常這種指針的應用是為了實現一些更高級的數據結構如鏈表和樹等。[1]
//此結構體的聲明包含了其他的結構體
struct COMPLEX{
char string[100];
struct SIMPLE a;
};
//此結構體的聲明包含了指向自己類型的指針
struct NODE{
char string[100];
struct NODE *next_node;
};

如果兩個結構體互相包含,則需要對其中一個結構體進行不完整聲明,如下所示:[1]
struct B;
//對結構體B進行不完整聲明
//結構體A中包含指向結構體B的指針
struct A{
struct B *partner;
//other members;
};
//結構體B中包含指向結構體A的指針,在A聲明完後,B也隨之進行聲明
struct B{
struct A *partner;
//other members;};

結構體作用
結構體和其他類型基礎數據類型一樣,例如int類型,char類型 只不過結構體可以做成你想要的數據類型。以方便日後的使用。[1]
在實際項目中,結構體是大量存在的。研發人員常使用結構體來封裝一些屬性來組成新的類型。由於C語言內部程序比較簡單,研發人員通常使用結構體創造新的「屬性」,其目的是簡化運算。[1]
結構體在函數中的作用不是簡便,其最主要的作用就是封裝。封裝的好處就是可以再次利用。讓使用者不必關心這個是什麼,只要根據定義使用就可以了。[1]
結構體的大小與內存對齊
結構體的大小不是結構體元素單純相加就行的,因為我們主流的計算機使用的都是32bit字長的CPU,對這類型的CPU取4個位元組的數要比取一個位元組要高效,也更方便。所以在結構體中每個成員的首地址都是4的整數倍的話,取數據元素時就會相對更高效,這就是內存對齊的由來。每個特定平台上的編譯器都有自己的默認「對齊系數」(也叫對齊模數)。程序員可以通過預編譯命令#pragma pack(n),n=1,2,4,8,16來改變這一系數,其中的n就是你要指定的「對齊系數」。[1]
規則:
1、數據成員對齊規則:結構(struct)(或聯合(union))的數據成員,第一個數據成員放在offset為0的地方,以後每個數據成員的對齊按照#pragma pack指定的數值和這個數據成員自身長度中,比較小的那個進行。[1]
2、結構(或聯合)的整體對齊規則:在數據成員完成各自對齊之後,結構(或聯合)本身也要進行對齊,對齊將按照#pragma pack指定的數值和結構(或聯合)最大數據成員長度中,比較小的那個進行。[1]
3、結合1、2可推斷:當#pragma pack的n值等於或超過所有數據成員長度的時候,這個n值的大小將不產生任何效果。

⑸ 求 數據結構課程設計

用C++寫一個類, list, stack, tree或者其他都可以,網上很多數據結構的代碼了,隨便照抄都行。http://code.ddvip.com/

如果嫌規模小了,就多寫幾個這樣的類,把它做成一個庫,考試過關沒什麼問題了。

如果你自己寫出了這些,你的水平就提高很多了。
我以前就這么做,代碼寫的比較完善,分數還可以,90多。

⑹ 數據結構課程設計是什麼

.需求分析
1.運行環境
硬體:計算機486/64M以上
操作系統: WIN9x 以上/WIN2000/WIN XP/WIN ME
相關軟體:vistualC++
2.程序所實現的功能:
(1)建立並顯示圖的鄰接表。
(2)深度優先遍歷,顯示遍歷結果。
(3)對該圖進行拓撲排序,顯示排序結果。
(4)給出某一確定頂點到所有其它頂點的最短路徑。
3.程序的輸入,包含輸入的數據格式和說明
(1)輸入頂點數,及各頂點信息(數據格式為整形)
(2)輸入邊數,及權值(數據格式為整形)
4.程序的輸出,程序輸出的形式
(1)輸出圖的鄰接表、深度優先遍歷結果、拓撲排序結果。
(2)輸入某一確定頂點到其它所有頂點的最短路徑。
5.測試數據
二、設計說明
1、 演算法設計的思想
建立圖類,建立相關成員函數。最後在主函數中實現。具體成員函數的實現請參看源程序。
2、 主要的數據結構設計說明
圖鄰接矩陣、鄰接表的建立。圖的深度優先遍歷、拓撲排序、頂點之間的最短路徑。
3、 程序的主要模板template <class Type> class Graph
4、 程序的主要函數
Graph、link()、DFTraverse()、TopologicalOrder()、
TopologicalOrder()、GetVertexPos()、ShortestPath
三、上機結果及體會
1、 實際完成的情況說明
主要程序參考教材《數據結構——C++版》。
2、 程序的性能分析
可連續建圖
3、 上機過程中出現的問題及其解決方案。
編譯沒有錯誤,但結果有問題。解決方案:雖然程序的編譯通過,只能說明語法上沒有問題,結果只所以不正確是因為演算法上原因。
4、 程序中可以改進的地方說明
程序中的深度優先遍歷,浪費空間較大,可以考慮用循環來做。但這樣將付出代碼長度度加長的代價。
5、 程序中可以擴充的功能及設計實現假想
實現假想:隨用戶的輸入可以隨時動態的顯示圖的生成。
6、 收獲及體會
編寫程序即是一件艱苦的工作,又是一件愉快的事情。最大的收獲:編程時如果遇到看似簡單但又無法解決的問題,很容易灰心喪氣。此時切不可煩躁,一定要冷靜的思考,認真的分析。要勇敢的面對問題,勇敢的接受問題,勇敢的處理問題,最後最勇敢的解決問題。
四、參考文獻
數據結構(C++版) 葉核亞 主編 機械工業出版社
數據結構經典演算法實現與習題解答 汪傑 編著 人民郵電出版社
數據結構課程設計 蘇仕華 編著 機械工業出版社
數據結構程序設計題典 李春葆 編著 清華大學出版社
數據結構課程與題解(用C/C++描述) 胡聖榮 編著 北京大學出版社

[程序運行流程圖]

char op //程序控制變數

⑺ 數據結構課程設計

這個是程序:
#include "string.h"
#define NULL 0
unsigned int key;
unsigned int key2;
int *p;
struct node
{
char name[20],address[20];
char num[11];
struct node *next;
}
**phone;
**nam;
**address;
typedef struct node *pnode;
typedef struct node *mingzi;

void hash(char num[11])
{
int i = 3;
key=(int)num[2];
while(num[i]!=NULL)
{
key+=(int)num[i];
i++;
key=key%17;

}

void hash2(char name[8])
{
int i = 1;
key2=(int)name[0];
while(name[i]!=NULL)
{
key2+=(int)name[i];
i++;
}
Key2=key2%17;

}

struct node* input()
{
struct node *temp=(struct node*)malloc(sizeof(struct node));
temp = new node;
temp->next=NULL;
printf("qing shu ru xing ming(no more then 8 chars) :\n");
scanf("%s",&temp->name);
printf"qing shu ru dian hua hao ma(no more then 11 numbers):\n");
scanf("%s",&temp->num);
printf("qing shu ru di (no more then 20 chars):\n");
scanf("%s",&temp->address);
return temp;
}

int add()
{
struct node *newphone;
struct node *newname;
newphone=input();
printf("ni de ji lu shi");
if(find(newphone->num))
{
printf("hao ma yi jing cun zai bu nene zai tian jia.\n");
return 0;
}
if(find2(newphone->name))
{
printf("xing ming yi jing cun zai bu neng zai tian jia.\n");
return 0;
}
printf("%s_%s_%s\n",newphone->name,newphone->address,newphone->num);
newname=newphone;
newphone->next=NULL;
newname->next=NULL;
hash(newphone->num);
hash2(newname->name);
newphone->next = phone[key]->next;
phone[key]->next=newphone;
newname->next = nam[key2]->next;
nam[key2]->next=newname;
return 0;
}

int find(char num[11])
{
int isfind=0;
struct node *q;
hash(num);
node *q=phone[key]->next;
while(q!= NULL)

{
if(strcmp(num,q->num) ==0)
{
isfind=1;
break;
}
q=q->next;
}
if(isfind)
printf("%s_%s_%s\n",q->name,q->address,q->num);
return isfind;
}
int find2(char name[8])
{
int isfind=0;
hash2(name);

struct node *q=nam[key2]->next;
while(q!= NULL)
{
if(strcmp(name,q->name)==0)
{
isfind=1;
break;
}
q=q->next;
}
if(isfind)
printf("%s_%s_%s\n",q->name,q->address,q->num);
return isfind;
}

void create()
{
int i;
phone = (pnode*)malloc(13*sizeof(pnode));
for(i=0;i<13;i++)
{
phone[i]=(struct node*)malloc(sizeof(struct node));
phone[i]->next=NULL;
}

}
void create2()
{
int i;
nam = (mingzi*)malloc(13*sizeof(mingzi));
for(i=0;i<13;i++)
{
nam[i]=(struct node*)malloc(sizeof(struct node));
nam[i]->next=NULL;
}
}
void list()
{
int i;
struct node *p;
for(i=0;i<13;i++)
{
p=phone[i]->next;
while(p)
{
printf("%s_%s_%s\n",p->name,p->address,p->num);
p=p->next;
}
}
}
void list2()
{
int i;
struct node *p;
for(i=0;i<13;i++)
{
p=nam[i]->next;
while(p!=NULL)
{
printf("%s_%s_%s\n",p->name,p->address,p->num);
p=p->next;
}
}
}

void menu()
{
printf("0.tian jia ji lv.\n");
printf("2.cha zhao ji lu.\n");
printf("3.xing ming lie biao.\n");
printf("4.hao ma lie biao.\n");
printf("5.qing chu suo you ji lu.\n");
printf("6.tui chu xi tong.\n");
}

int main()
{
char num[11];
char name[8];
int sel;
create();
create2();
while(1)
{
menu();
scanf("%d",&sel);
if(sel==3)
{
char b;
printf("Input 9 to search with number,8 to name.\n");
b=getch();
if(b=='9')
{
printf("Please input the number:\n");
scanf("%s",&num);

if(!find(num))
printf("Record not exist.\n");
}
else if(b=='8')
{
printf("Please input the name:\n");
scanf("%s",&name);
if(!find(name))
printf("Record not exist.\n");
}
else
{
printf("Wrong input!Please input again!\n");
continue;
}
}
else if(sel==2)
{
printf("All record with name:\n");
list2();

}
else if(sel==0)
{

printf("Please input the information:\n");
add();
}
else if(sel==4)
{

printf("All record with number:\n");
list();
}
else if(sel==5)
{
create();
create2();

printf("All records have been removed.\n");
}

else if(sel==6)
{printf("7");
break;
}
}
return 0;
}

熱點內容
美發店認證 發布:2021-03-16 21:43:38 瀏覽:443
物業糾紛原因 發布:2021-03-16 21:42:46 瀏覽:474
全國著名不孕不育醫院 發布:2021-03-16 21:42:24 瀏覽:679
知名明星確診 發布:2021-03-16 21:42:04 瀏覽:14
ipad大專有用嗎 發布:2021-03-16 21:40:58 瀏覽:670
公務員協議班值得嗎 發布:2021-03-16 21:40:00 瀏覽:21
知名書店品牌 發布:2021-03-16 21:39:09 瀏覽:949
q雷授權碼在哪裡買 發布:2021-03-16 21:38:44 瀏覽:852
圖書天貓轉讓 發布:2021-03-16 21:38:26 瀏覽:707
寶寶水杯品牌 發布:2021-03-16 21:35:56 瀏覽:837