赞
踩
数据结构实验
#include<stdio.h> #include<stdlib.h> #include<string.h> #define maxsize 10 typedef struct { char no[20]; char name[20]; int price; }Student; typedef struct List{ Student *elem; int length; }SqList; int tableflag=0; //设全局变量,标示表是否存在 SqList initList() //建表 { SqList L; int size,i; printf("请输入学生个数,不能超过%d个:\n",maxsize); scanf("%d",&size); if(size>maxsize||size<=0) { printf("超出限制大小,请重新建表"); exit(0); } L.elem=(Student *)malloc(size*sizeof(Student)); for(i=0;i<size;i++) { printf("请输入第%d名学生学号",i+1); scanf("%s",&L.elem[i].no); printf("请输入第%d名学生姓名",i+1); scanf("%s",&L.elem[i].name); printf("请输入第%d名学生成绩",i+1); scanf("%d",&L.elem[i].price); } L.length=i; tableflag=1; return L; } void search_name(SqList L,char *Name) //按名字查询 { int i; int flag=0; for(i=0;i<L.length;i++) { if(strcmp(L.elem[i].name,Name)==0) { printf("该学生学号为%s ",L.elem[i].no); printf("该学生成绩为%d\n",L.elem[i].price); flag=1; } } if(flag==0)printf("查无此人\n"); } void search_num(SqList L,int num) //按序号查询 { int i; int flag=0; for(i=0;i<L.length;i++) { if(num==i+1) { printf("该学生学号为%s ",L.elem[i].no); printf("该学生姓名为%s ",L.elem[i].name); printf("该学生成绩为%d\n",L.elem[i].price); flag=1; } } if(flag==0) printf("查无此人\n") ; } void Traver(SqList L) //遍历 { int i; printf("学生信息陈列如下,请检查核对\n"); for(i=0;i<L.length;i++) { printf("%d:",i+1); printf("%s ",L.elem[i].no); printf("%s ",L.elem[i].name); printf("%d\n",L.elem[i].price); } printf("共有%d个学生\n",L.length); } SqList insert(SqList L,int loc) //插入 { int i=loc-1; if(L.length>maxsize) { printf("超出限制大小,请重新建表"); exit(0); } for(int j=L.length;j>=i;j--) { L.elem[j+1]=L.elem[j]; } printf("请输入第插入学生学号"); scanf("%s",&L.elem[i].no); printf("请输入第插入学生姓名"); scanf("%s",&L.elem[i].name); printf("请输入第插入学生成绩"); scanf("%d",&L.elem[i].price); ++L.length; return L; } SqList del(SqList L,int loc) //删除 { int i=loc-1; printf("删除学生的学号为%s",L.elem[i].no); printf("删除学生的姓名为%s",L.elem[i].name); printf("删除学生的成绩为%d\n",L.elem[i].price); Student *q=&L.elem[loc]; Student *p=&L.elem[L.length-1]; for(;p>=q;q++) { *(q)=*(p+1); } L.length--; return L; } int main() { SqList L; int i=0; int e=9; int loc=-1; int num; char Name[20]; while(e!=0) { //操作表单 printf("***************************************************************************\n"); printf("请输入要进行的操作,0表示结束退出操作:\n"); printf("1:建立新表\n"); printf("2:按名字查询\n"); printf("3:按位置查询\n"); printf("4:插入\n"); printf("5:删除\n"); printf("6:遍历\n"); printf("7:将数据写入文件 \n"); printf("8:从文件中读取数据\n"); printf("***************************************************************************\n"); scanf("%d",&e); switch(e) { case 0: printf("退出操作:\n");break; //终止 case 1: //建表 { if ( tableflag==1) { printf("你已经建了一个表了,请将数据导入文件后重启程序建新表\n"); break; } L=initList(); break; } case 2: //按名字查询 { if ( tableflag==0) { printf("你还没有建表\n"); break; } printf("请输入学生名字:"); while(getchar()!='\n'); gets(Name); search_name( L,Name); break; } case 3: //按位置查询 { if ( tableflag==0) { printf("你还没有建表\n"); break; } printf("请输入学生位置:"); scanf("%d",&num); search_num( L, num); break; } case 4: //插入 { if ( tableflag==0) { printf("你还没有建表\n"); break; } printf("请输入插入位置:"); scanf("%d",&loc); if(loc<=0&&loc>L.length) printf("输入位置错误\n"); else { L=insert(L, loc); } break; } case 5: //删除 { if ( tableflag==0) { printf("你还没有建表\n"); break; } printf("请输入删除位置:"); scanf("%d",&loc); if(loc<=0&&loc>L.length) printf("输入位置错误\n"); else { L=del(L, loc); } break; } case 6: //遍历 { if ( tableflag==0) { printf("你还没有建表\n"); break; } Traver(L); break; } case 7: //写入文件 { if (tableflag==0) { printf("你还没有建表\n"); break; } char acc[20]; FILE *fp; printf("请输入存储路径\n"); scanf("%s",&acc); if((fp=fopen(acc,"w"))==NULL) { printf("打开文件失败\n"); break; } printf("打开文件成功\n"); fprintf(fp,"%d\n",L.length); for(i=0;i<L.length;i++) { fprintf(fp,"%s\n",L.elem[i].no); fprintf(fp,"%s\n",L.elem[i].name); fprintf(fp,"%d\n",L.elem[i].price); } rewind(fp); fclose(fp); break; } case 8: //读取文件 { char ne[1]; char acc[20]; if ( tableflag==1) { printf("你已经建了一个表了,请将数据导入文件后重启程序建新表\n"); break; } FILE *fp; printf("请输入打开路径\n"); scanf("%s",&acc); if((fp=fopen(acc,"r"))==NULL) { printf("打开文件失败\n"); break; } printf("打开文件成功"); fscanf(fp,"%d",&L.length); fgets(ne,0,fp); //使文件指针换行,方便读取 L.elem=(Student *)malloc(L.length*sizeof(Student)); for(i=0;i<L.length;i++) { fscanf(fp,"%s",&L.elem[i].no); fgets(ne,0,fp); fscanf(fp,"%s",&L.elem[i].name); fgets(ne,0,fp); fscanf(fp,"%d",&L.elem[i].price); } rewind(fp); fclose(fp); tableflag=1; break; } default:printf("输入出错,请重新尝试\n"); } } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。