#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <windows.h>
#include <conio.h>
typedef struct book{
char dengluhao[20];
char name[20];
char author[20];
char fenleihao[20];
char company[20];
char outtime[20];
char price[20];
struct book *next;
}Booksystem, *Pointer;
Pointer Head=NULL;
FILE *fp;
int num=0;
int Makemenu() //菜单功能
{
int choice;
printf("\t\t********************MENU*********************\n");
printf("\t\t 1. 图书信息录入\n");
printf("\t\t 2. 图书信息浏览\n");
printf("\t\t 3. 图书信息查询(按书名查询)\n");
printf("\t\t 4. 图书信息查询(按作者名查询)\n");
printf("\t\t 5. 图书信息排序\n");
printf("\t\t 6. 图书信息删除\n");
printf("\t\t 7. 图书信息修改\n");
printf("\t\t 8. 图书信息保存\n");
printf("\t\t 9. 退出\n");
printf("\t\t***********************************************\n");
printf("\t选择你需要的服务选项:");
scanf("%d",&choice);
return choice;
}
void Insert(Pointer *Head) //录入功能
{
char dengluhao[20];
char ch;
Pointer p,q,r;
printf("\n\t请输入登录号:");
scanf("%s", dengluhao);
p = q = *Head;
while(p != NULL) {
if(strcmp(p->dengluhao, dengluhao)==0){
printf ("该书籍已经存在!");
return;
} else {
q = p;
p = p->next;
}
}
r = (Pointer)malloc(sizeof(Booksystem));
r->next = NULL;
if(r == NULL) {
printf("分配空间失败!");
return;
}
/*if(q == NULL)
*Head = r;
else{
q->next = r;
}*/
strcpy(r->dengluhao, dengluhao);
printf("\n\t输入书名:");
scanf("%s", r->name);
getchar();
printf("\n\t输入作者名:");
scanf("%s", r->author);
getchar();
printf("\n\t输入分类号:");
scanf("%s", r->fenleihao) ;
getchar();
printf("\n\t输入出版单位:");
scanf("%s", r->company) ;
getchar();
printf("\n\t输入出版日期:");
scanf("%s",r->outtime);
printf("\n\t输入价格:");
scanf("%s", r->price);
num++;
printf("是否继续录入(y or n)?\n");
getchar();
scanf("%c",&ch);
if(ch=='y' || ch== 'Y')
Insert(Head);
else {
if(ch== 'n' ||ch== 'N')
return;
else
printf("\n\t输入错误,请重新输入!");
}
}
void Through(Pointer Head) //浏览功能
{
Pointer p;
p=Head;
if(p==NULL){
printf("无数据,没有录入图书信息.");
}else{
while(p!=NULL){
printf("\n\t\t登录号:%-20s\n", p->dengluhao); //显示图书信息
printf("\t\t书名: %-20s\n", p->name);
printf("\t\t作者名: %-20s\n", p->author);
printf("\t\t分类号: %-20s\n", p->fenleihao);
printf("\t\t出版单位:%-20s\n", p->company);
printf("\t\t出版时间:%-20s\n", p->outtime);
printf("\t\t价格: %-20s\n",p->price);
p = p->next;
}
return ;
}
}
void Serch_name(Pointer Head) { //查询功能(按书名查询)
char name[20];
Pointer p;
int flag=0;
printf("请输入需要查询的书名:");
scanf("%s", name);
p = Head;
while(p != NULL) {
if(strcmp(p->name, name) == 0) {
printf("\t登录号: %-20s\n", p->dengluhao);
printf("\t书名: %-20s\n", p->name);
printf("\t作者名: %-20s\n", p->author);
printf("\t分类号: %-20s\n", p->fenleihao);
printf("\t出版单位:%-20s\n", p->company);
printf("\t出版时间:%-20s\n", p->outtime);
printf("\t价格: %-20s\n",p->price);
flag = 1;
p = p->next;
} else
p = p->next;
}
if(flag == 0)
printf("\t\t很抱歉,没有查询到相关书籍\n");
getchar();
}
void Search_author(Pointer Head) { //查询功能(按作者名查询)
int flag = 0;
char author[20];
Pointer p;
printf("请输入需要查询书籍的作者名:");
scanf("%s", author);
p = Head;
while(p != NULL) {
if(strcmp(p->author, author) == 0) {
printf("\t登录号: %-20s\n", p->dengluhao);
printf("\t书名: %-20s\n", p->name);
printf("\t作者名: %-20s\n", p->author);
printf("\t分类号: %-20s\n", p->fenleihao);
printf("\t出版单位:%-20s\n", p->company);
printf("\t出版时间:%-20s\n", p->outtime);
printf("\t价格: %-20s\n",p->price);
flag = 1;
p = p->next;
} else
p = p->next;
}
if(flag == 0)
printf("\t\t没有找到相同作者名书籍\n");
getch();
}
void Paixu(Pointer *Head) //排序功能
{
Pointer p,q;
int i,j;
char a[20],ch;
if(Head==NULL){
printf("\n\t并未找到任何书籍信息!");
return ;
}
p=q=*Head;
for(i=0;i<num;i++){
for(j=i+1;j<num;j++){
q=p;
p=p->next;
if(strcmp(q->name,p->name)>0) {
strcpy(a, p->dengluhao);
strcpy(p->dengluhao, q->dengluhao);
strcpy(q->dengluhao, a);
strcpy(a, p->name);
strcpy(p->name, q->name);
strcpy(q->name, a);
strcpy(a, p->author);
strcpy(p->author, q->author);
strcpy(q->author, a);
strcpy(a, p->fenleihao);
strcpy(p->fenleihao, q->fenleihao);
strcpy(q->fenleihao,a);
strcpy(a, p->company);
strcpy(p->company, q->company);
strcpy(q->company, a);
strcpy(a, p->outtime);
strcpy(p->outtime, q->outtime);
strcpy(q->outtime, a);
strcpy(a, p->price);
strcpy(p->price, q->price);
strcpy(q->price, a);
}
}
p = q = *Head;
}
do {
printf("\n\t排序完成,需不需要显示结果:");
getchar();
scanf("%c", &ch);
if(ch== 'y' || ch== 'Y')
Through(*Head);
else {
if(ch=='n' || ch== 'N')
return;
else
printf("\n\t输入错误,请重新输入!");
}
} while(ch!= 'y' && ch!= 'n' && ch!= 'Y' && ch!= 'N');
}
void Delete(Pointer *Head) //删除功能
{
Pointer p,q;
char dengluhao[20];
int flag=1;
printf("\n\t请输入你要删除书籍的登录号:");
scanf("%s",dengluhao);
p=q=*Head;
while(p!=NULL && flag==1){
if(strcmp(p->dengluhao,dengluhao)==0){
if(p==*Head){
*Head=p->next;
free(p);
}else{
q->next=p->next;
free(p);
}
flag=0;
}else{
q=p;
p=p->next;
}
}
if(flag==1){
printf("\n\t抱歉没有找到可以删除的书籍!");
return ;
}
printf("\n\t已成功删除!");
return ;
}
void Revise(Pointer Head) //修改功能
{
Pointer p;
char dengluhao[20];
int flag=1;
printf("\n\t请输入要修改书籍的登录号:");
scanf("%s",dengluhao);
p=Head;
while(p != NULL && flag==1) {
if(strcmp(p->dengluhao, dengluhao) == 0) {
printf("\n\t请输入新的登录号:");
scanf("%s", p->dengluhao);
getchar();
printf("\n\t请输入新的书名:");
scanf("%s", p->name);
getchar();
printf("\n\t请输入新的作者名:");
scanf("%s", p->author);
getchar();
printf("\n\t请输入新的分类号:");
scanf("%s",p->fenleihao) ;
getchar();
printf("\n\t请入新的出版单位:");
scanf("%s", p->company) ;
getchar();
printf("\n\t请输入新的出版日期:");
scanf("%s",p->outtime);
printf("\n\t请输入新的价格:");
scanf("%s", p->price);
flag = 0;
printf("修改成功!\n");
} else
p = p->next;
}
if(flag==1){
printf("\n\t抱歉并没有找到要删除的书籍!");
}else{
return ;
}
}
void Reserve() { //文件的保存
Pointer p;
p = Head;
char file[20];
printf("请输入文件路径及文件名:");
scanf("%s", file);
if((fp = fopen(file, "w+")) == NULL) {
printf("不能打开文件!\n");
return;
}
while(p != NULL) {
fprintf(fp, "%s\t%s\t%s\t%s\t%s\t%s\t%s\n",
p->dengluhao, p->name, p->author, p->fenleihao, p->company, p->outtime, p->price);
p = p->next;
}
fclose(fp);
printf("文件已经保存!\n");
return;
}
void Exit() //退出
{
exit(0);
}
int main(void)
{
for(;;){
switch(Makemenu()){
case 1:Insert(&Head); break;
case 2:Through( Head); break;
case 3:Serch_name(Head); break;
case 4:Search_author( Head); break;
case 5:Paixu( &Head) ; break;
case 6:Delete( &Head); break;
case 7:Revise( Head); break;
case 8:Reserve(); break;
case 9:Exit(); break;
default:putchar('\a');
}
}
getch();
return 0;
}
这是一段 C 语言代码,实现了一个图书管理系统,包含了录入、浏览、查询、删除、修改、保存等功能。
代码使用了链表来存储图书信息,每个节点表示一本书。通过菜单功能实现了各种操作。其中,录入功能用 Insert 函数实现,通过输入各项信息并将新的节点加入链表实现。浏览功能通过遍历链表并输出各项信息实现。查询功能可以按照书名和作者名进行查询,输入需要查询的书名或作者名,遍历链表并输出符合条件的节点信息。删除功能可以删除指定的图书信息节点,通过输入需要删除的书籍的登录号实现。修改功能可以修改指定的图书信息节点的各项信息,同样需要输入需要修改的书籍的登录号。保存功能将链表中的图书信息保存到文件中。
代码有些细节问题,例如函数的传参不太合理,存在一些小的错误。
不知道你这个问题是否已经解决, 如果还没有解决的话: