当前位置:首页 » 软件设计 » 数据结构课程设计

数据结构课程设计

发布时间: 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