c语言程序设计图书馆源代码

c语言程序设计图书馆源代码,第1张

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

#include <string.h>

typedef int BOOL

typedef struct bookinfo

{

char number[15]/*产品编号*/

char name[30]/*产品名称*/

float price/*单价*/

char auther[20]/*作者*/

BOOL isExit/*存在状态*/

char lendername[20]/*借书人姓名*/

char lendersex[2]/*借书人性别*/

char lendernum[15]/*借书人学号*/

}BOOKINFO

void menu()

{

printf("\n\n\n\n\n\n\n")

printf("\t\t\t图书管理系统\n")

printf("\t\t\t1:新进图书基本信息的输入\n")

printf("\t\t\t2:显示全部记录\n")

printf("\t\t\t3:根据图书名称查询图书基本信息\n")

printf("\t\t\t4:根据图书名称对撤销的图书信息进行删除\n")

printf("\t\t\t5:按照图书名称从小大到排序\n")

printf("\t\t\t6:统计某价格以上的图书数量\n")

printf("\t\t\t7:列出所有未借出去的图书信息\n")

printf("\t\t\t8:退出\n")

}

void choice_1_input_new()/*输入新进的图书信息*/

{

char choice

FILE *p

BOOKINFO newbook

system("cls")

while(1)

{

printf("输入图书编号:")

gets(newbook.number)

printf("输入图书名称:")

gets(newbook.name)

printf("输入图书单价:")

scanf("%f",&newbook.price)

while(getchar()!='\n')

printf("输入图书的作者:")

gets(newbook.auther)

printf("输入借书人姓名:")

gets(newbook.lendername)

printf("输入借书人性别:")

gets(newbook.lendersex)

printf("输入借书人学号:")

gets(newbook.lendernum)

printf("是否保存该条书目?(Y/N)\n")

if(choice=='Y'||choice=='y')

{

newbook.isExit=1/*将图书状态设置成1,表示没有借出*/

p=fopen("c:\\bookinfo.data","ab")

fwrite(&newbook,sizeof(BOOKINFO),1,p)

fclose(p)

printf("\n该条书目已添加到c:\\bookinfo.data文件中!\n")

}

else

{

printf("\n本条书目未保存!\n")

}

printf("\n是否继续添加书目?(Y/N)\n")

while(choice!='Y'&&choice!='y'&&choice!='N'&&choice!='n')

if(choice=='Y'||choice=='y')

continue

else

break

}

}

void choice_2_display_all()/*显示全部图书信息*/

{

FILE *p

int n

BOOKINFO bookinfo[100]

int booknumber=0

system("cls")

p=fopen("c:\\bookinfo.data","rb")

while(!feof(p))

{

fread(&bookinfo[booknumber],sizeof(BOOKINFO),1,p)

booknumber++

}

/*booknumber--使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/

fclose(p)

booknumber--

if(booknumber==0)

{

printf("没有任何图书信息!\n\n")

}

else

{

n=0

printf(" 图书信息如下\n")

printf(" 图书信息| 借书人信息 \n")

printf("编号 名称单价作者图书状态 | 姓名性别学号\n")

while(n<booknumber)

{

printf("%-6s%-12s%-8.1f%-8s%-9d| %-12s%-8s%-8s\n",

bookinfo[n].number,bookinfo[n].name,bookinfo[n].price,

bookinfo[n].auther,bookinfo[n].isExit,bookinfo[n].lendername,

bookinfo[n].lendersex,bookinfo[n].lendernum)

n++

}

}

printf("\n\n按任意键回到主菜单!\n")

}

void choice_3_search_according_name()/*根据图书名称显示图书的信息*/

{

char search[20]=""/*search用来存放要查询的书名*/

int n

FILE *p

char choice

BOOKINFO bookinfo[100]

int booknumber=0

system("cls")

p=fopen("c:\\bookinfo.data","rb")

while(!feof(p))

{

fread(&bookinfo[booknumber],sizeof(BOOKINFO),1,p)

booknumber++

}

booknumber--/*使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/

fclose(p)

while(1)

{

printf("输入要查询的书本名称:")

gets(search)

if(booknumber==0)

{

printf("书库中没有任何信息!\n\n")

printf("按任意键回到主菜单!\n\n")

getch()

break

}/*if结束*/

else

{

for(n=0n<booknumbern++)

if(strcmp(bookinfo[n].name,search)==0)

{

printf("该书的详细信息如下:\n")

printf(" 图书信息| 借书人信息 \n")

printf("编号 名称单价作者图书状态 | 姓名性别学号\n")

printf("%-6s%-12s%-8.1f%-8s%-9d| %-12s%-8s%-8s\n",

bookinfo[n].number,bookinfo[n].name,bookinfo[n].price,

bookinfo[n].auther,bookinfo[n].isExit,bookinfo[n].lendername,

bookinfo[n].lendersex,bookinfo[n].lendernum)

break

}

if(n>=booknumber)

printf("没有查找该书的任何信息!\n")

printf("\n\n是否继续查询?(Y/N)\n")

choice=getch()

while(choice!='Y'&&choice!='y'&&choice!='N'&&choice!='n')

choice=getch()

if(choice=='Y'||choice=='y')

continue

else

break

}/*else结束*/

}/*while(1)结束*/

}

void choice_4_delete_according_name()/*根据图书名称对图书信息进行删除*/

{

char search[20]=""/*search用来存放要删除的书名*/

int n,i

FILE *p

char choice

BOOKINFO bookinfo[100]

int booknumber

system("cls")

while(1)

{

printf("输入要删除的书本名称:")

gets(search)

p=fopen("c:\\bookinfo.data","rb")

booknumber=0

while(!feof(p))

{

fread(&bookinfo[booknumber],sizeof(BOOKINFO),1,p)

booknumber++

}

booknumber--/*使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/

fclose(p)

if(booknumber==0)

{

printf("书库中没有任何信息!\n\n")

printf("按任意键回到主菜单!\n\n")

getch()

break

}/*if结束*/

else

{

for(n=0n<booknumbern++)

if(strcmp(bookinfo[n].name,search)==0)

{

break

}

if(n>=booknumber)

printf("没有查找该书的任何信息!\n")

else

{

printf("是否确认需要删除该条书目?(Y/N)")

choice=getch()

while(choice!='Y'&&choice!='y'&&choice!='N'&&choice!='n')

choice=getch()

if(choice=='Y'||choice=='y')

{

for(i=ni<booknumber-1i++)

bookinfo[i]=bookinfo[i+1]

booknumber--

p=fopen("c:\\bookinfo.data","wb")

for(n=0n<booknumbern++)

fwrite(&bookinfo[n],sizeof(BOOKINFO),1,p)

fclose(p)

printf("删除成功!\n")

}

else

printf("\n\n该条书目没有被删除!")

}

printf("\n\n是否继续进行删除 *** 作?(Y/N)\n")

choice=getch()

while(choice!='Y'&&choice!='y'&&choice!='N'&&choice!='n')

choice=getch()

if(choice=='Y'||choice=='y')

continue

else

break

}/*else结束*/

}/*while(1)结束*/

}

void choice_5_sort_according_name()/*根据图书名称排序*/

{

FILE *p

int m,n

BOOKINFO temp

BOOKINFO bookinfo[100]

int booknumber

p=fopen("c:\\bookinfo.data","rb")

booknumber=0

system("cls")

while(!feof(p))

{

fread(&bookinfo[booknumber],sizeof(BOOKINFO),1,p)

booknumber++

}

booknumber--/*使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/

fclose(p)

if(booknumber==0)

{

printf("没有任何图书信息!\n\n")

}

else

{

for(m=0m<booknumber-1m++)

for(n=m+1n<booknumbern++)

if(strcmp(bookinfo[m].name,bookinfo[n].name)>0)

{

temp=bookinfo[m]

bookinfo[m]=bookinfo[n]

bookinfo[n]=temp

}

p=fopen("c:\\bookinfo.data","wb")

for(m=0m<booknumberm++)

fwrite(&bookinfo[m],sizeof(BOOKINFO),1,p)

fclose(p)

printf("\n\n完成排序!\n\n")

}

printf("按任意键回到主菜单!\n")

getch()

}

void choice_6_display_high_price()/*根据价格列出图书信息*/

{

float price

FILE *p

int n

int count=0

BOOKINFO bookinfo[100]

int booknumber

system("cls")

printf("请输入价格:")

scanf("%f",&price)

p=fopen("c:\\bookinfo.data","rb")

booknumber=0

while(!feof(p))

{

fread(&bookinfo[booknumber],sizeof(BOOKINFO),1,p)

booknumber++

}

booknumber--/*使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/

fclose(p)

if(booknumber==0)

{

printf("没有任何图书信息!\n\n")

}

else

{

for(n=0n<booknumbern++)

{

if(bookinfo[n].price>=price)

count++

}

if(count==0)

printf("书库中没有比%.1f$价格高的图书!",price)

else

{

printf(" 价格高于%.1f$的图书信息如下\n",price)

printf(" 图书信息| 借书人信息 \n")

printf("编号 名称单价作者图书状态 | 姓名性别学号\n")

for(n=0n<booknumbern++)

{

if(bookinfo[n].price>=price)

printf("%-6s%-12s%-8.1f%-8s%-9d| %-12s%-8s%-8s\n",

bookinfo[n].number,bookinfo[n].name,bookinfo[n].price,

bookinfo[n].auther,bookinfo[n].isExit,bookinfo[n].lendername,

bookinfo[n].lendersex,bookinfo[n].lendernum)

}

}

}

printf("\n\n按任意键回到主菜单!\n")

getch()

}

void choice_7_display_according_exitflag()/*根据存在状态列出图书信息*/

{

FILE *p

int n

int count=0

BOOKINFO bookinfo[100]

int booknumber

system("cls")

booknumber=0

p=fopen("c:\\bookinfo.data","rb")

while(!feof(p))

{

fread(&bookinfo[booknumber],sizeof(BOOKINFO),1,p)

booknumber++

}

booknumber--

fclose(p)

if(booknumber==0)

{

printf("书库中没有任何书目存在!\n")

}

else

{

for(n=0n<booknumbern++)

if(bookinfo[n].isExit==1)

count++

if(count==0)

printf("书库中的书籍全部借出!\n")

else

{

printf("书库中未被借出的图书信息如下:\n\n")

printf(" 图书信息| 借书人信息 \n")

printf("编号 名称单价作者图书状态 | 姓名性别学号\n")

for(n=0n<booknumbern++)

if(bookinfo[n].isExit==1)

{

printf("%-6s%-12s%-8.1f%-8s%-9d| %-12s%-8s%-8s\n",

bookinfo[n].number,bookinfo[n].name,bookinfo[n].price,

bookinfo[n].auther,bookinfo[n].isExit,bookinfo[n].lendername,

bookinfo[n].lendersex,bookinfo[n].lendernum)

}

}

}

printf("\n按任意键返回主菜单!\n")

getch()

}

void main()

{

char choice

clock_t tm

FILE *p

if((p=fopen("c:\\bookinfo.data","rb"))==NULL)

{

p=fopen("c:\\bookinfo.data","wb")

fclose(p)

}

while(1)

{

system("cls")

menu()

choice=getch()

switch(choice)

{

case '1':choice_1_input_new()break/*输入新进的图书信息*/

case '2':choice_2_display_all()break/*显示全部图书信息*/

case '3':choice_3_search_according_name()break/*根据图书名称显示图书的信息*/

case '4':choice_4_delete_according_name()break/*根据图书名称对图书信息进行删除*/

case '5':choice_5_sort_according_name()break/*根据图书名称排序*/

case '6':choice_6_display_high_price()break/*根据价格列出图书信息*/

case '7':choice_7_display_according_exitflag()break/*根据存在状态列出图书信息*/

case '8':printf("\n\n\t\t\t谢谢使用,再见!\n\t\t\t按任意键退出!\n")getch()return

default:

printf("\n\n\t\t\t请输入菜单中的数字!(1~8)")

tm=clock()

while(clock()<tm+1800)

break

}

}

}

说实话这个程序比较简单,但是代码现在写起来很烦!

结构体大概这么定义

struct library_book

{

char Bname[20]

char Bauthor[20]

char Bsn[20]

}

第一个功能用fread,fwrite等函数实现读写功能,每次读写的大小都是sizeof(struct library)

第二个功能就使用循环实现就行了!

忘记的差不多了,以前编写过类似的程序!

我简单给你说一下吧。

1、首先定义数据结构

图书结构:图书编号、图书名称、单价、作者、存在状态

人员结构:人员编号(学生为学号,教师为工作编号)、姓名、性别等

借书结构:人员编号、图书编号、借书时间、还书时间

2、由于是C系统,通常情况下,数据要存储在文件中,因此,还需要定义文件结构:图书、人员、借书信息。

为了数据处理速度,可将借书信息中已经还书的信息单独放在还书信息中,借书信息中的数据只是已经借出还没有归还的数据。

3、系统功能定义,以及编码。

由于系统太过庞大,你还是自己试着做一下吧,应该可以做好的。

学习本身就是做程序,如果有困难,可以上我们团队提问题,随时恭候!

祝学习进步!


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11613974.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-17
下一篇2023-05-17

发表评论

登录后才能评论

评论列表(0条)

    保存