
这个是自己写的
注释很清楚地
有多少不清楚的问我
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<stdlib.h>
struct books_list
{
char author[20];/*图文名*/
char bookname[20];/*书名*/
char publisher[20];/*出版单位*/
char pbtime[15];/*出版时间*/
char loginnum[10];/*登陆号*/
float price;/*单价*/
char classfy[10];/*分类号*/
struct books_list * next; /*链表的时钟域*/
};
struct books_list * Create_Books_Doc();/*新建函数*/
void InsertDoc(struct books_list * head); /*插入*/
void DeleteDoc(struct books_list * head , int num);/*删除*/
void Print_Book_Doc(struct books_list * head);/*浏览*/
void search_book(struct books_list * head); /*查询*/
void info_change(struct books_list * head);/*修改*/
void save(struct books_list * head);/*保留数据至文档*/
/*新建函数头结点*/
struct books_list * Create_Books_Doc()
{
struct books_list * head;
head=(struct books_list *)malloc(sizeof(struct books_list)); /*分配头结点空间*/
head->next=NULL; /*头结点时钟域初始化,定为空*/
return head;
}
/*保留数据至文档*/
void save(struct books_list * head)
{
struct books_list *p;
FILE *fp;
p=head;
fp=fopen("data.txt","w+"); /*以写方法新建并打开 data.txt文档*/
fprintf(fp,"┏━━━┳━━━━━┳━━━━━┳━━━━━┳━━━━━━┳━━━┳━━━━┓\n"); /*向文档输出表格*/
fprintf(fp,"┃登录号┃ 书 名 ┃ 作者┃ 出版单位 ┃ 出版时间 ┃分类号┃ 价格 ┃\n");
fprintf(fp,"┣━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━━╋━━━╋━━━━┫\n");
/*表盘从头结点开始移动,遍历至尾节点,依次输出图书资料*/
while(p->next!= NULL)
{
p=p->next;
fprintf(fp,"┃%-6.6s┃%-10.10s┃%-10.10s┃%-10.10s┃%-12.12s┃%-6.6s┃%.2f ┃\n",p->loginnum,p->bookname,p->author,p->publisher,p->pbtime,p->classfy,p->price);
}
fprintf(fp,"┗━━━┻━━━━━┻━━━━━┻━━━━━┻━━━━━━┻━━━┻━━━━┛\n");
fclose(fp);
printf("已将书籍数据保留到 data.txt 文件\n");
}
/*插入*/
void InsertDoc(struct books_list *head)
{
/*概念结构体指针变量 s指向开辟的新节点首地址 p为中间变量*/
struct books_list *s, *p;
char flag='Y'; /*定义flag,方便用户选择重复输入*/
p=head;
/*遍历到尾节点c语言简单图书管理系统,p指向尾结点*/
while(p->next!= NULL)

{
p=p->next;
}
/*开辟新空间,存入数据,添加进函数*/
while(flag=='Y'||flag=='y')
{
s=(struct books_list *)malloc(sizeof(struct books_list));
printf("\n请输入图书登陆号:");
fflush(stdin);
scanf("%s",s->loginnum);
printf("\n请输入图书书目:");
fflush(stdin);
scanf("%s",s->bookname);
printf("\n请输入图书作者名:");
fflush(stdin);
scanf("%s",s->author);
printf("\n请输入图书出版社:");
fflush(stdin);
scanf("%s",s->publisher);
printf("\n请输入图书出版时间:");
fflush(stdin);
scanf("%s",s->pbtime);
printf("\n请输入图书分类号:");
fflush(stdin);
scanf("%s",s->classfy);
printf("\n请输入图书价格:");
fflush(stdin);
scanf("%f",&s->price);
printf("\n");
p->next=s; /*将新提高的结点添加进函数*/
p=s; /*p指向尾结点,向后移*/
s->next=NULL;
printf("━━━━ 添加成功!━━━━");
printf("\n继续添加?(Y/N):");
fflush(stdin);
scanf("%c",&flag);
printf("\n");
if(flag=='N'||flag=='n')
{break;}
else if(flag=='Y'||flag=='y')
{continue;}
}
save(head); /*保存数据至文档*/
return;
}
/*查询操作*/
void search_book(struct books_list *head)
{
struct books_list * p;
char temp[20];
p=head;
if(head==NULL || head->next==NULL) /*分析是否为空*/
{
printf("━━━━ 图书馆为空!━━━━\n");
}
else
{
printf("请输入您要查找的新书: ");
fflush(stdin);
scanf("%s",temp);
/*表盘从头结点开始移动,遍历至尾节点,查找书籍信息*/
while(p->next!= NULL)

{
p=p->next;
if(strcmp(p->bookname,temp)==)
{
printf("\n图书已寻找!\n");
printf("\n");
printf("登陆号: %s\t\n",p->loginnum);
printf("名著: %s\t\n",p->bookname);
printf("作者名: %s\t\n",p->author);
printf("出版单位: %s\t\n",p->publisher);
printf("出版时间: %s\t\n",p->pbtime);
printf("分类号: %s\t\n",p->classfy);
printf("低价: %.2f\t\n",p->price);
}
if(p->next==NULL)
{
printf("\n查询完毕!\n");
}
}
}
return;
}
/*浏览操作*/
void Print_Book_Doc(struct books_list * head)
{
struct books_list * p;
if(head==NULL || head->next==NULL) /*分析是否为空*/
{
printf("\n━━━━ 没有图书记录! ━━━━\n\n");
return;
}
p=head;
printf("┏━━━┳━━━━━┳━━━━━┳━━━━━┳━━━━━━┳━━━┳━━━━┓\n");
printf("┃登录号┃ 书 名 ┃ 作者┃ 出版单位 ┃ 出版时间 ┃分类号┃ 价格 ┃\n");
printf("┣━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━━╋━━━╋━━━━┫\n");
/*表盘从头结点开始移动c语言简单图书管理系统,遍历至尾节点,依次输出图书资料*/
while(p->next!= NULL)
{
p=p->next;
printf("┃%-6.6s┃%-10.10s┃%-10.10s┃%-10.10s┃%-12.12s┃%-6.6s┃%.2f ┃\n",p->loginnum,p->bookname,p->author,p->publisher,p->pbtime,p->classfy,p->price); /*循环输出表格*/
}
printf("┗━━━┻━━━━━┻━━━━━┻━━━━━┻━━━━━━┻━━━┻━━━━┛\n");
printf("\n");
}
/*修改操作*/
void info_change(struct books_list * head)
{
struct books_list * p;
int panduan=0; /*此函数用来分析是否寻找图书*/
char temp[20];
p=head;
printf("请输入要修改的新书:");
scanf("%s",temp);
while(p->next!= NULL)
{
p=p->next;
if(strcmp(p->bookname,temp)==)
{
printf("\n请输入图书登陆网银:");
fflush(stdin);
scanf("%s",p->loginnum);
printf("\n请输入图书书目:");

fflush(stdin);
scanf("%s",p->bookname);
printf("\n请输入图书作者名:");
fflush(stdin);
scanf("%s",p->author);
printf("\n请输入图书出版社:");
fflush(stdin);
scanf("%s",p->publisher);
printf("\n请输入图书出版时间:");
fflush(stdin);
scanf("%s",p->pbtime);
printf("\n请输入图书分类号:");
fflush(stdin);
scanf("%s",p->classfy);
printf("\n请输入图书价格:");
fflush(stdin);
scanf("%f",&p->price);
printf("\n");
panduan=1;
}
}
if(panduan==0)
{
printf("\n━━━━ 没有图书记录! ━━━━\n\n");
}
return;
}
/*删除操作*/
void DeleteDoc(struct books_list * head)
{
struct books_list *s,*p; /*s为后面变量,p为遍历时使用的时钟*/
char temp[20];
int panduan; /*此函数用来分析是否寻找了图书*/
panduan=0;
p=s=head;
printf("[请输入您要删除的新书]:");
scanf("%s",temp);
/*遍历到尾结点*/
while(p!= NULL)
{
if(strcmp(p->bookname,temp)==)
{
panduan++;
break;
}
p=p->next;
}
if(panduan==1)
{
for(;s->next!=p;) /*找出所需删除卡号结点的上一个结点*/
{
s=s->next;
}
s->next=p->next; /*将后一结点地址赋值给前一结点的时钟域*/
free(p);
printf("\n━━━━ 删除成功! ━━━━\n");
}
else /*未找出对应书籍*/
{
printf("您输入的书籍不存在,请确定后输入!\n");
}
return;

}
int main(void)
{
struct books_list * head;
char choice;
head=NULL;
for(;;) /*实现反复输入选择*/
{
printf("┏━┓━━━━━━━━━━━━━━━━━━━┏━┓\n");
printf("┃ ┃socat 图书管理系统┃ ┃\n");
printf("┃ ┗━━━━━━━━━━━━━━━━━━━┛ ┃\n");
printf("┃●[1]书籍资料录入┃\n");
printf("┃┃\n");
printf("┃●[2]书籍资料浏览┃\n");
printf("┃┃\n");
printf("┃●[3]书籍资料查询┃\n");
printf("┃┃\n");
printf("┃●[4]书籍资料修改┃\n");
printf("┃┃\n");
printf("┃●[5]书籍资料删除┃\n");
printf("┃┃\n");
printf("┃●[6]退出功能┃\n");
printf("┗━━━━━━━━━━━━━━━━━━━━━━━┛\n");
printf("请选择:");
fflush(stdin);
scanf("%c",&choice);
if(choice=='1')
{
if(head==NULL)
{
head=Create_Books_Doc();
}
InsertDoc(head);
}
else if(choice=='2')
{
Print_Book_Doc(head);
}
else if(choice=='3')
{
search_book(head);
}
else if(choice=='4')
{
info_change(head);
}
else if(choice=='5')
{
DeleteDoc(head);
}
else if(choice=='6')
{
printf("\n");
printf("━━━━━━━━ 感谢使用书籍管理功能 ━━━━━━━━\n");
break;
}
else
{
printf("━━━━ 输入错误,请再次输入!━━━━");
break;
}
}
return ;
}
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-118409-1.html
好像因工艺流程不同调和油要放心一点