数据结构电话号码本源代码(顺序表)

#define LIST_INIT_SIZE 10 //确定分配空间大小 
//#define LIST_MORE 1O //分配增量 
#include <string.h> 
#include <malloc.h> 
#include <iostream.h> 
#include <conio.h> //getch() 
#include <stdlib.h> 


typedef struct student 
{ //学生信息结构体类型 
char No[9]; 
char name[7]; 
float score; 
}student; 




typedef struct{ //定义顺序类型sqlist 
student *stu; 
int length; 
int listsize; 
}sqlist; 


/下面是函数的原型声明 
int Initlist(sqlist &sl); //顺序表初始化 
int creat(sqlist &sl);//顺序表的建立 
int insertlist(sqlist &sl,student elem,int pos);//顺序表的插入操作 
int search(sqlist sl,int pos);//按指定位置删除 
int dele_elem1(sqlist &sl,int pos,student &elem);//顺序表的按位置删除操作 
int dele_elem2(sqlist &sl,char *num,student &elem);//顺序表的按学号删除 
int out_list(sqlist sl);//顺序表的输出操作 


主函数/// 
void main() 



cout<<"\n\n欢迎使用学生信息查询系统,请按提示使用!\n\n\n"; 
sqlist sl; 
Initlist(sl); 
student s; 
char number[9]; 
int pos; 
while(1) 

cout<<" \n ~~~~~~~~~~~~~~请选择您要执行的操作:~~~~~~~~~~~~~~\n"; 
cout<<endl<<endl; 
cout<<" `````````````````````````````````````````````\n"; 
cout<<" ` 1、清空顺序表 `\n"; 
cout<<" ` 2、创建顺序表 `\n"; 
cout<<" ` 3、插入信息 `\n"; 
cout<<" ` 4、删除信息 `\n"; 
cout<<" ` 5、查找信息 `\n"; 
cout<<" ` 6、显示当前信息 `\n"; 
cout<<" ` 0、退出系统 `\n"; 
cout<<" `````````````````````````````````````````````\n"; 
cout<<"\n请从序号0--6中选择:"; 
int n;char c; 
cin>>n; 
if(n==0)//退出 

cout<<"\n谢谢您的使用,再见!\n"; 
break; 

else if(n==1)//清空 

cout<<"此操作将清空顺序表,您是否继续?(n退出,其他任意键继续)\n"; 
cin>>c; 
if(c==n) 
break; 
else 
{ Initlist(sl);cout<<"顺序表已清空!您可以继续其他操作!\n\n";} 

else if(n==2)//创建 

cout<<"\n此操作将创建顺序表,您是否继续?(n退出,其他任意键继续)\n"; 
cin>>c; 
if(c=='n') 
break; 
else creat(sl); 

else if(n==3)//插入 

cout<<"输入插入学生信息:\n"; 
cout<<"学生学号:"; 
cin>>s.No; 
cout<<"学生姓名:"; 
cin>>s.name; 
cout<<"学生成绩:"; 
cin>>s.score; 
insertlist(sl,s,pos); 

else if(n==4)//删除 

int m; 
cout<<"1、我想按输入特定位置删除\n"; 
cout<<"2、我想按输入学生学号删除\n"; 
cout<<"请您选择:"; 
cin>>m; 
cout<<endl; 
if(m==1) 

dele_elem1(sl,pos,s); 



else if(m==2) 

cout<<"输入您要删除的学生学号:"; 
cin>>number; 
dele_elem2(sl,number,s); 
cout<<endl; 


else if(n==5) 

int num; 
cout<<"请输入您要查找的学生位置:"; 
cin>>num; 
search(sl,num); 

else if(n==6)//显示 
out_list(sl); 
else if(n!=0||n!=1||n!=2||n!=3||n!=4||n!=5||n!=6) 
cout<<"您的输入有误,请重新输入!\n"; 


}//while 







/函数定义 




int Initlist(sqlist &sl) 

sl.stu =(student *)malloc(LIST_INIT_SIZE*sizeof(student)); 
if(!sl.stu) 

return 0; 
cout<<"分配失败!\n"; 

sl.length=0; 
sl.listsize=LIST_INIT_SIZE; 
return 1; 

创建操作/ 
int creat(sqlist &sl) 

cout<<"下面创建学生信息查询系统,请按提示输入数据:\n"; 
sl.length=0; 
int m; //用于记数 
cout<<"您一共要输入多少组学生数据?\n"; 
cin>>m;cout<<"组\n"; 
for(int i=1;i<=m;i++) 

cout<<"请输入第"<<i<<"个同学的学号:"; 
cin>>sl.stu[i-1].No; 
cout<<endl; 
cout<<"请输入第"<<i<<"个同学的姓名:"; 
cin>>sl.stu[i-1].name ; 
cout<<endl; 
cout<<"请输入第"<<i<<"个同学的成绩:"; 
cin>>sl.stu[i-1].score ; 
cout<<endl; 
sl.length++; 

cout<<"\n本次操作您一共输入了"<<m<<"组数据\n"; 


return 1; 





//插入操作/ 
int insertlist(sqlist &sl,student elem,int pos) 

cout<<"请输入您要插入信息的位置:\n"; 
cin>>pos; 
if(pos<1||pos>sl.length+1) 

cout<<"您要插入的位置不存在,请检查!\n"; 
return 0; 

struct student *p; 
for(p=sl.stu;p<sl.stu+sl.length;p++) 
if(strcmp(p->No,elem.No )==0) 

cout<<"输入的学号已存在!\n"; 
cout<<"该学号在系统中代表的信息为:\n"; 
cout<<"学号:"<<p->No<<endl; 
cout<<"姓名:"<<p->name<<endl; 
cout<<"成绩:"<<p->score<<endl; 
return 0; 

struct student *q; 
q=&(sl.stu[pos-1]); 


for(p=&(sl.stu[sl.length-1]);p>=q;--p) 
*(p+1)=*p; 
*q=elem; 
++sl.length; 
cout<<"\n插入已成功,要检查请看输出!\n"; 
return 1; 



int search(sqlist sl,int pos) 



cout<<"查找中...\n"; 
if(pos<1||pos>sl.length) 

cout<<"对不起,您要查找的学生不存在,请检查!\n"; 
return 0; 

cout<<"以下是您要找的学生信息:\n\n"; 
cout<<"学生姓名:"<<sl.stu[pos-1].name<<endl; 
cout<<"学生学号:"<<sl.stu[pos-1].No <<endl; 
cout<<"学生成绩:"<<sl.stu[pos-1].score<<endl<<endl; 
return 1; 





删除操作/// 
int dele_elem1(sqlist &sl,int pos,student &elem) 

cout<<"请输入您要删除元素的位置:"; 
cin>>pos; 
if(pos<1||pos>sl.length) 



cout<<"您要删除的元素不存在,请检查!\n"; 
return 0; 

struct student *p,*q; 
p=&(sl.stu[pos-1]); 
elem=*p; 
q=sl.stu+sl.length-1; 
for(++p;p<=q;++p) 
*(p-1)=*p; 
--sl.length; 
cout<<"已删除,请检查输出!\n\n"; 
return 1; 





int dele_elem2(sqlist &sl,char *num,student &elem) 

student *q,*p; 
p=sl.stu; 
q=sl.stu+sl.length-1; 


int flag=0; 
for(p;p<=q;p++) 

if(strcmp(num,p->No)==0) 

elem=*p; 
flag=1; 

if(flag)break; 

if(flag) 

for(++p;p<=q;++p) 
*(p-1)=*p; 
--sl.length; 
cout<<"已删除!检查输出看是否符合您的要求!\n\n"; 
return 1; 

else 

cout<<"不存在该学号代表的学生信息!\n"; 
return 0; 


输出/// 
int out_list(sqlist sl) 

if(sl.length==0) 

cout<<"\n\n~现在还没有任何信息或信息被删除!您可以先建立顺序表!~\n\n"; 
return 0; 

else 



cout<<"\n这是您要求的信息显示:\n"; 
struct student *q; 
q=sl.stu; 
int count=0; 
for(q;q<sl.stu+sl.length;q++) 

count++; 
cout<<endl; 
cout<<"第"<<count<<"条:"<<endl; 
cout<<"学号:"<<q->No<<endl; 
cout<<"姓名:"<<q->name<<endl; 
cout<<"成绩:"<<q->score<<endl; 
cout<<"||||||||||||||||||||||||\n"; 

cout<<"~~~共有信息"<<sl.length<<"条~~~\n\n"; 
}//else 
return 1; 
}
  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值