大学生新手,期末必须完成的课程设计,老师要求我们只用在网上寻找到代码,然后完全 完全理解他! 要求的是 索引表,链表,顺序表三种方式作出三个系统,我已经获得了索引表和链表,可是顺序表的实在找不到,我自己也打不出来,所以来这里求助了! 我将链表的代码发到这里,希望能有高手帮我改成顺序表! 谢谢!#include<stdio.h> #include<string.h> #include<conio.h> #include<stdlib.h> #define N sizeof(struct book)#define PT "%-5d %10s %6s %6s %8s %3d \n",p->num,p->name,p->where,p->author,p->pub,p->countstruct book /*图书信息*/{ int num; /*书号*/ char name[10]; /*书名*/ char where[10]; /*所在书库*/ char author[15]; /*作者*/ char pub[20]; /*出版社*/ int count; /*数量*/ struct book *next;};/*输出模块*/void print(struct book *p0){ struct book *p; p=p0->next; printf("\n\n\t\t^^^^^^^^^^^^^^图书信息表^^^^^^^^^^^^^^"); printf("\n\n图书编号---图书名称---所在书库----作者----出版社---数量\n"); while(p!=NULL) { printf(PT); p=p->next; } getch();}/*输入模块*/struct book *creat() { struct book *head,*p1,*p2; int i=0; head=p2=(struct book *)malloc(N); head->next=NULL; printf("\n\n\t\t录入图书信息"); printf("\n\t---------------------------------------"); while(1) { p1=(struct book *)malloc(N); printf("\n 请输入图书编号(书号为0结束): "); scanf("%d",&p1->num); if(p1->num!=0) { printf("\n\n书名 所在书库 作者 出版社 图书数量\n"); scanf("%s%s%s%s%d",p1->name,p1->where,p1->author,p1->pub,&p1->count); p2->next=p1; p2=p1; i++; } else break; } p2->next=NULL; free(p1); printf("\n\t\t----------------------------------------"); printf("\n\t\t %d 种书录入完毕",i); getch(); return head;}/*查找模块*/void find(struct book *p0){ char name[10]; int flag=1; struct book *p; p=p0->next; printf("请输入要查找的书名:\n"); scanf("%s",name); for(p=p0;p;p=p->next) if(strcmp(p->name,name)==0) { printf("\n\n图书编号---图书名称---所在书库----作者----出版社---数量\n"); printf(PT); flag=0; break; } if(flag) printf("\n 暂无此图书信息\n"); getch();}/*删除模块*/void del(struct book *p0){ char name[10]; int flag=1; struct book *p; p=p0; printf("请输入要删除的书名:\n"); scanf("%s",name); while(p!=NULL) { if(strcmp(p->name,name)==0) { p0->next=p->next; /*后续节点连接到前驱节点之后*/ free(p); printf("\t该书资料已删除."); flag=0; break; } p0=p; p=p->next; } if(flag) printf("\n\t无此图书信息。"); getch();}/*增加模块*/void insert(struct book *p0){ struct book *p; p=(struct book *)malloc(N); while(1) { printf("\n 请输入要增加的图书编号(书号为0 退出): "); scanf("%d",&p->num); if(p->num!=0) { if(p0->next!=NULL&&p0->next->num==p->num) /*找到重号*/ { p=p->next; free(p); printf("\t该书已存在"); } else {printf("\n\n书名 所在书库 作者 出版社 图书数量\n"); scanf("%s%s%s%s%d",p->name,p->where,p->author,p->pub,&p->count); p->next=p0->next; p0->next=p; printf("\t已成功插入."); } } else break; } getch();}/*修改模块*/void modify(struct book *p0){ char name[10]; int flag=1; int choice; struct book *p; p=p0->next; printf("请输入要修改的书名:\n"); scanf("%s",name); while(p!=NULL&&flag==1) { if(strcmp(p->name,name)==0) { printf("\n\t请选择要修改的项:"); printf("\n\t 1.修改图书编号\n"); printf("\n\t 2.修改图书所在书库\n"); printf("\n\t 3.修改图书作者\n"); printf("\n\t 4.修改图书出版社\n"); printf("\n\t 5.修改图书库存量\n"); scanf("%d",&choice); switch(choice) { case 1: { printf("\n 请输入新的图书编号:"); scanf("%d",p->num); break; } case 2: { printf("\n 请输入新的图书书库:"); scanf("%s",p->where); break; } case 3: { printf("\n 请输入新的图书作者:"); scanf("%s",p->author); break; } case 4: {printf("\n 请输入新的图书出版社:"); scanf("%s",p->pub); break; } case 5: {printf("\n 请输入新的图书库存量:"); scanf("%d",p->count); break; } } printf("\n\t该项已成功修改。\n\t 新的图书信息:"); printf("\n\n图书编号---图书名称---所在书库----作者----出版社---数量\n"); printf(PT); flag=0; } p0=p; p=p0->next; } if(flag) printf("\n\t暂无此图书信息。"); getch();}/*读文件*/struct book *read_file() { int i=0; struct book *p,*p1,*head=NULL; FILE *fp; if((fp=fopen("library.txt","rb"))==NULL) {printf("\n\n\n\n\n \t********库文件不存在,请创建!**********"); getch(); return NULL; } head=(struct book *)malloc(N); p1=head; head->next=NULL; printf("\n 已有图书信息:"); printf("\n\n图书编号---图书名称---所在书库----作者----出版社---数量\n"); while(!feof(fp)) { p=(struct book *)malloc(N); /*开辟空间以存放的取得信息*/ while(fscanf(fp,"%d%s%s%s%s%d",&p->num,p->name,p->where,p->author,p->pub,&p->count)!=EOF) { printf(PT); i++; } p1->next=p; p1=p; } p1->next=NULL; fclose(fp); printf("\n 共种%d 图书信息",i); printf("\n\n\n 文件中的信息以正确读出。按任意键进入主菜单。"); getch(); return (head); }/*保存文件*/void save(struct book *head) { FILE *fp; struct book *p; fp=fopen("library.txt","wb"); /*以只写方式打开二进制文件*/ if(fp==NULL) /*打开文件失败*/ { printf("\n=====>打开文件失败!\n"); getch(); return ; } else for(p=head->next;p!=NULL;p=p->next) fprintf(fp,"%d %s %s %s %s %d\n",p->num,p->name,p->where,p->author,p->pub,p->count); fclose(fp); printf("\n\t保存文件成功!\n");}void main(){ struct book *head=NULL; int choice=1; head=read_file(); if(head==NULL) { printf("\n\t\t**********"); getch(); head=creat(); } do { system("cls"); printf("\t\t----------Welcome---------\n"); printf("\n\n\t欢迎您,图书管理员.\n"); printf("\n\n\n\n\n"); printf("\n\t 请选择:"); printf("\n\t 1.查询图书信息\n"); printf("\n\t 2.修改图书信息\n"); printf("\n\t 3.增加图书信息\n"); printf("\n\t 4.删除图书信息\n"); printf("\n\t 5.显示所有图书信息\n"); printf("\n\t 0.退出系统\n"); scanf("%d",&choice); switch(choice) { case 1: find(head); break; case 2: modify(head); break; case 3: insert(head); break; case 4: del(head); break; case 5: print(head); break; case 0: system("cls"); printf("\n\n\n\n\n\t^^^^^^^^^^谢谢使用,再见^^^^^^^^^^!\n\n"); break; } }while(choice!=0); save(head);}
目前暂无任何回答
- 0 回答
- 2 关注
- 2525 浏览
添加回答
举报
0/150
提交
取消