c语言课程设计:图书管理系统设计的基本思路是什么?

如题所述

图书管理系统主要要求可以录入书籍,添加书目,查找书本信息,删除或修改信息,有的还要求显示是否被借阅等。

一般采用结构体数组,链表,文件操作和自定义函数。主要是需要对基础知识掌握牢固。

先定义结构体,然后对结构体的成员进行定义,选择数组存储书本各种信息。录入信息可以用for和do while循环等来做。

存放信息需要文件操作函数,比如fopen,fwrite等。

删除和添加可以删除节点或者增加节点。

查找之类的可以用字符串操作的各种函数实现。

附上参考源代码

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#define  books "f:\\books.txt"
#define booksbak  "f:\\booksbak.txt"
struct bookinfo
{
char isbn[20];
char title[30];
char author[20];
int count;
};

struct book
{
struct bookinfo onebook;
struct book *next;
};

struct book *searchBook ( struct book *listptr,char isbn[])
{
while(listptr!=(struct book *)0)
if (strcmp(listptr->onebook.isbn,isbn)==0)
return listptr;
else
listptr=listptr->next;
return (struct book *)0;
}


void MainSearchbook(struct book *firstptr)
{
struct book *ptr;
char isbnno[20];
printf("请输入ISBN:");
scanf("%s",&isbnno);
ptr=searchBook(firstptr,isbnno);
if (ptr!=(struct book *)0)
{
printf("找到了!!!\n");
printf("ISBN:%s\n",ptr->onebook.isbn);
printf("Title:%s\n",ptr->onebook.title);
printf("Author:%s\n",ptr->onebook.author);
}
else
printf("sorry,not found!!!\n");
}



int addBook(struct book *listptr,struct bookinfo note)
{
while(listptr->next!=0)
listptr=listptr->next;
listptr->next=(struct book *)malloc(sizeof(struct book));
listptr->next->onebook=note;
listptr->next->next=0;
return 0;

}

void MainAdd(struct book *listptr,FILE *fp)
{
int ok;
struct bookinfo note;
printf("请输入ISBN:");
scanf("%s",¬e.isbn);
printf("请输入Title:");
scanf("%s",¬e.title);
printf("请输入Author:");
scanf("%s",¬e.author);
ok=addBook(listptr,note);
if (ok==0)
{
//将加入的图书写到文件中保存
fprintf(fp,"\n%s %s %s %d",note.isbn,note.title,note.author,0);
printf("添加图书成功!!!\n");
}
else
printf("添加图书失败!!!\n");
}


int removeBook(struct book *listptr,char isbn[])
{
while(listptr->next!=(struct book *)0)
{
if (strcmp(listptr->next->onebook.isbn,isbn)==0)
{
listptr->next=listptr->next->next;
return 0;
}
else
listptr=listptr->next;
}

return -1;
}

void MainRemove(struct book *listptr,FILE *fp)
/************************************************************************/
/* 删除书籍函数,通过ISBN删除链表节点,同时删除文件中对应信息              */
/* 删除文件中一行,用的是笨方法,把需要的信息写到新文件,删除旧文件,重命名..*/
/************************************************************************/
{
char isbnno[20];
int ok;
struct bookinfo onebook;
printf("请输入ISBN:");
scanf("%s",&isbnno);
ok=removeBook(listptr,isbnno);
if (!ok)
{
FILE *fpbak;
if ((fpbak=fopen(booksbak,"a+"))==NULL)
printf("文件打开失败!!!\n");
fseek(fp,0,SEEK_SET);   //移到文件开始
while((fscanf(fp,"%s %s %s %d\n",&onebook.isbn,&onebook.title,&onebook.author,&onebook.count))!=EOF)
{
if (strcmp(onebook.isbn,isbnno)!=0)
{
fprintf(fpbak,"%s %s %s %d\n",onebook.isbn,onebook.title,onebook.author,onebook.count);
}
}
fclose(fp);
fclose(fpbak);
if (remove(books))   //删除失败返回非0
{
printf("删除文件失败!!!\n");
return ;
}
else
if (rename(booksbak,books))  //重命名失败返回非0值
{
printf("重命名失败!!!\n");
return ;
}

printf("删除成功!!!\n");
}
else
printf("查无此书!!!");
}

int  choice(void)
{
int c;
printf("1.查看图书\n");
printf("2.添加图书\n");
printf("3.删除图书\n");
printf("4.退出程序\n");
printf("请选择序号:");
return c=getchar();
//return c=getche();
printf("\n\n");

}

int addEntry(FILE *fp,struct book *firstptr)
/************************************************************************/
/*        主要用来加载文件中存放的图书信息                              */
/************************************************************************/

{
struct bookinfo onebook;
while((fscanf(fp,"%s %s %s %d\n",&onebook.isbn,&onebook.title,&onebook.author,&onebook.count))!=EOF)
{
while(firstptr->next!=0)
firstptr=firstptr->next;
firstptr->next=(struct book *)malloc(sizeof(struct book));
firstptr->next->onebook=onebook;
firstptr->next->next=0;
}
return 0;

}


int main(int argc,char *argv[])
{
int ch;
struct book first;
strcpy(first.onebook.isbn,"123456");
strcpy(first.onebook.title,"Programming C");
strcpy(first.onebook.author,"yhb");
first.next=0;
struct book *firstptr=&first;   //链表头指针
FILE *fp;
if ((fp=fopen(books,"a+"))==NULL)
printf("文件打开失败!!!");
addEntry(fp,firstptr);
while(1)
{
    system("CLS");   //清屏
/************************************************************************/
/*          想想这里为什么要清空缓冲区?                                 */
/*由于上一次(choice函数)的getchar(),还有一个'\n'留在缓冲区....          */
/*可以把这句话注释掉看看,没有这句话会遇到麻烦                           */
/*如果不用fflush,可以将上面的getchar()换成getche()                      */
/*比较getchar(),getch(),getche()......                                  */
/************************************************************************/
fflush(stdin); 
ch=choice()-48;
switch (ch)
{
case 1:
MainSearchbook(firstptr);
break;
case 2:
MainAdd(firstptr,fp);
break;
case 3:
MainRemove(firstptr,fp);
break;
case 4:
printf("谢谢使用...\n");
exit(0);
default:
printf("请输入正确序号!");
}
system("PAUSE");
}
return 0;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-11-26
设计内容及要求:
主要利用c语言的文件操作能力设计开发一个小型的管理信息系统,至少具有如下功能:图书入库,按书名、出版社、价格、作者进行查询和分类统计。操作界面要符合用户的一般习惯,图形或文本界面都可以设计参数图书信息包括:登录号、书名、作者名、分类号、出版单位、出版时间、价格等。试设计一图书信息管理系统,使之能提供以下功能:
按书名查询
按作者名查询
文件记录的字段数量不少于6个,分类统计中类别不少于2个。本回答被提问者采纳
第2个回答  2020-04-08
最近刚帮朋友做过一个,思路嘛~
先要定义一个图书的类,类里有图书的基本信息的数据,对图书进行操作的函数。
主函数用switch语句实现菜单的分支选择操作,用goto实现菜单的循环~
相似回答