图书管理系统
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<string.h>
struct Book{
char ID[20];
char Name[50];
int price;
};
typedef struct Librarysystem{
Book Data;
struct Librarysystem *next;
}LinkList;
LinkList *InitList(){
LinkList *System;
System=(LinkList *)malloc(sizeof(LinkList));
System->next=NULL;
return System;
}
void CreateList(LinkList *System,int n){
LinkList *s,*last;
int i;
last=System;
for(i=0;i<n;i++){
printf("输入ID:");
s=(LinkList *)malloc(sizeof(LinkList));
scanf("%c",&s->Data);
gets(s->Data.ID);
printf("\n输入书名:");
gets(s->Data.Name);
printf("\n输入价格:");
scanf("%d",&s->Data.price);
s->next=NULL;
last->next=s;
last=s;
}
s=System->next;
if(s!=NULL){
printf("录入成功!!");
}else{
printf("录入失败!!");
}
}
void InsList(LinkList *System,int x){
LinkList *s,*last;
last=System;
int i=0;
int l=0;
while(last!=NULL){
last=last->next;
i++;
}
last=System;
while(last!=NULL&&l<i-1){
last=last->next;
l++;
}
for(i=0;i<x;i++){
printf("\n输入ID:");
s=(LinkList *)malloc(sizeof(LinkList));
scanf("%c",&s->Data);
gets(s->Data.ID);
printf("\n输入书名:");
gets(s->Data.Name);
printf("\n输入价格:");
scanf("%d",&s->Data.price);
s->next=last->next;
last->next=s;
}
l=0;
s=System->next;
while(s!=NULL){
s=s->next;
l++;
}
if(l>=x){
printf("录入成功!!\n");
}else{
printf("录入失败!!\n");
}
}
void Locate(LinkList *System){
char p[50];
printf("输入查询信息(ID或者Name或者Price):");
int i;
i=0;
gets(p);
LinkList *s;
s=System->next;
printf("\n查询到以下:\n");
while(s!=NULL){
if(strcmp(s->Data.ID,p)==0||strcmp(s->Data.Name,p)==0||s->Data.price==atoi(p)){
printf("\nID:");
puts(s->Data.ID);
printf("Name:");
puts(s->Data.Name);
printf("price:");
printf("%d",s->Data.price);
i++;
}
s=s->next;
}
if(i==0){
printf("\n查无此书!!");
}
}
void Delist(LinkList *System){
char p[50];
printf("按顺序输入要删除的书名或者ID(1~2项):");
gets(p);
int i=0;
int j=0;
int l=0;
LinkList *s,*x;
s=System->next;
while (s!=NULL)
{
s=s->next;
i++;
}
s=System->next;
while(s!=NULL){
if(strcmp(s->Data.ID,p)==0||strcmp(s->Data.Name,p)==0||s->Data.price==atoi(p)){
l++;
break;
}
s=s->next;
l++;
}
while(s!=NULL){
if(l==1){
s=s->next;
x=s;
if(s==NULL){
printf("出错了!!系统以没有图书!!请添加图书\n");
System->next=s;
break;
}
s->next=x->next;
System->next=s;
s=System->next;
while(s!=NULL){
s=s->next;
j++;
}
if(j==i){
printf("删除失败!!\n");
}else{
printf("删除成功!!\n");
}
}else{
s=System->next;
x=s->next;
s->next=x->next;
System->next=s;
s=System->next;
while(s!=NULL){
s=s->next;
j++;
}
if(j==i){
printf("删除失败!!\n");
}else{
printf("删除成功!!\n");
}
}
}
if(j==i||i==l){
printf("出错了!!系统没有这本图书\n");
}else if(j!=0){
s=System->next;
printf("删除后的图书:\n");
while(s!=NULL){
printf("\nID:");
puts(s->Data.ID);
printf("Name:");
puts(s->Data.Name);
printf("\nprice:");
printf("%d",s->Data.price);
s=s->next;
}
}
}
void Issue(LinkList *System){
char p[50];
int i,x,y;
x=i=y=0;
LinkList *s;
printf("输入0结束购书!\n");
printf("输入要购买的书号或者书名:");
while(*p!='0'){
gets(p);
if(*p=='0'){
break;
}
s=System->next;
while(s!=NULL){
if(strcmp(s->Data.ID,p)==0){
i=s->Data.price;
}
else if(strcmp(s->Data.Name,p)==0){
i=s->Data.price;
break;
}
s=s->next;
}
x=i;
y=x+y;
}
printf("\n本次购买图书一共花费:%d¥\n欢迎下次光临",y);
}
void Menu(){
printf("\n 图书系统");
printf("\n--------------------------------------");
printf("\n 1--创建系统 ");
printf("\n 2--增加书籍 ");
printf("\n 3--查询书籍 ");
printf("\n 4--购买书籍 ");
printf("\n 5--按顺序删除书籍 ");
printf("\n 0--退出 ");
printf("\n--------------------------------------");
printf("\n请输入菜单号(0-5):");
}
int main(){
LinkList *System;
int n,x;
char ch1,ch2,a;
ch1='y';
while(ch1=='y'||ch1=='Y'){
Menu();
scanf("%c",&ch2);
getchar();
switch(ch2){
case '1':
System=InitList();
printf("输入录入书籍数:");
scanf("%d",&n);
CreateList(System,n);
break;
case '2':
printf("输入增加书籍数:");
scanf("%d",&x);
InsList(System,x);
break;
case '3':
Locate(System);
break;
case '4':
Issue(System);
break;
case '5':
Delist(System);
break;
case '0':
ch1='n';
break;
default:
printf("输入有误!!!!");
}
if(ch2!='0'){
printf("\n按回车键继续,按任意键返回主菜单!\n");
a=getchar();
if(a!='\xA'){
getchar();
ch1='n';
}
}
}
}