求图书馆管理系统程序(c语言)

如题所述

C程序项目-图书管理系统收藏
#include"stdio.h"#include"stdlib.h"#include"windows.h"#include"string.h"
/*图书相关信息*/struct bookinf //定义图书相关信息结构体{ int num; char bname[20]; char wname[10]; char clanum[14]; char pubcom[10]; char pubtime[10]; float price;};
structmanage //定义管理员相关信息结构体{ char manage_name[10]; char password[10];};
/*首页*/void index() //首页打印设置{ char input; printf("\n\n\t\t\t*****************************\n"); printf("\t\t\t Paladin图书信息查询管理系统\n"); printf("\t\t\t*****************************\n\n\n"); printf("------------------------------------------------------------------------------\n"); printf("\n\t\t\t书山有路勤为径\n"); printf("\t\t\t\t 学海无涯苦作舟\n"); printf("\n\n\t 总策划:吴昊\n\n"); printf("\t 程式设计:肖书明樊启恒芦丹覃枝霞况轩 (排名不分先后)\n\n"); printf("\t 联系方式:QQ:6828000 or Mail To:[email protected]\n"); printf("\t________________________________________________________________\n"); printf("\t\tCopyrights @ Accp SIT25 Leo Workgroup 2004.8\n"); printf("\t\t\t All RightsReserved\n"); printf("\t\t\t\tVer 1.03\n"); printf("\t<按任意键进入>\n\t"); input=getchar(); //让用户输入一个字符后再进行下一步(以后在本程序中用得很多) system("cls"); //清屏}
/*登陆方式*/ void login(){ void tra_view(); //声明包含的函数 void adm_view(); void byebye(); void about(); void coloregg();
int input; char input_1; do //循环显示登陆选项(当输入的数不为选项数的时候重复循环) { system("cls"); printf("\n\n\n\t1.以游客身份进入\n"); printf("\t2.以管理员身份进入\n"); printf("\t3.关于本系统\n"); printf("\t4.退出本系统\n\n\n"); printf("\t请选择服务类别:"); scanf("%d",&input); if(input!=1&&input!=2&&input!=3&&input!=4&&input!=99) //输入数不等于选项的时候打印画面 { printf("\n\t输入出错!请重新选择~\n"); printf("\n\t按任意键返回选择页面~\n\t"); input_1=getchar(); input_1=getchar(); system("cls"); } if (input==4) { byebye(); //如果输入数为4,则执行byebye()函数 } } while (input!=1&&input!=2&&input!=3&&input!=4&&input!=99);
switch(input) //分支选择 { case 1:tra_view(); break; //选1执行游客进入方式 case 2:adm_view(); break; //选2执行管理员进入方式 case 3:about(); break; //选3执行关于界面函数 case 99:coloregg(); break; //选99执行彩蛋函数 }}/*关于界面*/void about(){ void login(); char input; //关于界面的打印设置 system("cls"); printf("\n\n\t\t\t\t欢迎使用帮助\n"); printf("\t_______________________________________________________________"); printf("\n\t1.本系统采用模块化设计\n"); printf("\t每一项功能由单独的函数块控制,一个功能块有错不会影响全局\n\n"); printf("\t2.人性化设计\n"); printf("\t相关提示信息丰富,以人为本\n\n"); printf("\t3.功能强大\n\n"); printf("\t 实现了:\n"); printf("\t\t1 图书信息录入\n"); printf("\t\t2 图书信息查询\n"); printf("\t\t3 图书信息修改\n"); printf("\t\t4 图书信息删除\n"); printf("\t\t5 图书信息排序\n"); printf("\t\t6 提供游客和管理员两种登陆方式\n"); printf("\t\t 加以修改可以满足网络的需要\n\n"); printf("\t\t7 管理员的帐号密码可以自我设定,修改\n"); printf("\t\t8 彩蛋~~(进入方法嘛,嘿嘿)\n"); printf("\n\t按任意键返回登陆界面!"); input=getchar(); input=getchar(); login(); //任意键返回登陆界面}
/*彩蛋*/void coloregg() //打印界面{ char inp; void login(); system("cls"); printf("\n\n\n\t\t一直以为\n\t\t"); inp=getchar(); inp=getchar(); printf("\t\t隐了身别人就找不到我\n\t\t"); inp=getchar(); printf("\t\t可是我错了\n\t\t"); inp=getchar(); printf("\t\t象我这么出众的男人\n\t\t"); inp=getchar(); printf("\t\t不管到哪都是受人瞩目的焦点\n\t\t"); inp=getchar(); printf("\t\t我那忧郁的眼神\n\t\t"); inp=getchar(); printf("\t\t唏嘘的胡渣子\n\t\t"); inp=getchar(); printf("\t\t还有那神乎其技的AK扫射\n\t\t"); inp=getchar(); printf("\t\t以及那杯82年的马爹利和发哥给的牙签\n\t\t"); inp=getchar(); printf("\t\t无不深深出卖了我~~~\n\t\t"); inp=getchar(); printf("\t\t\t\t--------狂人\n\t\t"); inp=getchar();
login();}
/*离开界面*/void byebye() //离开界面{ char input; system("cls"); printf("\n\n\n\n\n\t\t\t路漫漫其修远兮"); printf("\n\n\n\n\t\t\t\t\t吾将上下而求索"); printf("\n\n\t________________________________________________________________"); printf("\n\n\n\t\t*感谢您的使用*\n\n\t\t"); printf("按任意键退出本系统\n\t\t"); input=getchar(); input=getchar(); printf("\n\t\t"); exit(0); //exit()函数跳出整个程序}
/*删除所有相关信息*/void delall() //管理员选项中的初始化函数{ void login(); void adm_servelist(); int inp; char input; do //如果输入的不是界面提供的选项值,则重复显示输入界面 { system("cls"); printf("\n\n\t----------!!警告!!----------\n"); printf("\n\t一旦选择了全部初始化将清除全部数据!包括图书信息和管理员信息!\n"); printf("\n\t初始化完毕后返回登陆界面\n"); printf("\n\n\t你确定要初始化吗\n"); printf("\n\n\t1.是的~我要初始化\t2.不要~让我再想想\n"); printf("\n\t请输入服务选项:"); scanf("%d",&inp); switch (inp) { case 1: //如果输入为1则删除book.dat和password.dat文件 remove("book.dat"); remove("password.dat"); printf("\n\n\t初始化完毕!\n\t所有数据全部清空!\n\t按任意键返回登陆界面!"); input=getchar(); input=getchar(); login(); //并返回登陆界面 break; case 2: //选2则返回管理员登陆界面 adm_servelist(); break; default: //否则打印如下字样并重复循环 printf("\n\n\t对不起~没有这项服务!\n\t按任意键重新选择\n\t"); input=getchar(); input=getchar(); break; } } while (inp!=1&&inp!=2&&inp!=3);}
/*游客登陆方式*/void tra_view(){ void tra_book_view(); void tra_book_search(); void login();
int inp; char input;
do //同以往的do{}while一样,用来保证用户输入的数能够被执行 { system("cls"); printf("\n\n\t------------欢迎光临ACCP图书馆------------"); printf("\n\n\n\t1.图书信息浏览\n"); printf("\t2.查询指定图书\n"); printf("\t3.退出\n"); printf("\n\n\t请选择服务类别:"); scanf("%d",&inp); if (inp!=1&&inp!=2&&inp!=3) { printf("\n\t没有这项服务~\n"); printf("\t按任意键重新选择"); input=getchar(); input=getchar(); } } while (inp!=1&&inp!=2&&inp!=3);
switch(inp) //分支选择 { case 1: tra_book_view(); break; //选1则执行游客浏览 case 2: tra_book_search(); break; //选2则执行游查询 case 3: login(); break; //选3返回登陆界面 }}
/*游客浏览方式*/void tra_book_view(){ void tra_view(); void tra_book_view();
intinp,i=0,n=0; FILE *fp; char input; struct bookinf bookview[100]; if((fp=fopen("book.dat","rb"))==NULL) //判断图书信息文件是否存在,不存在则显示如下字样 { system("cls"); printf("\n\n\n\t数据尚未初始化~~\n\n\t请在管理菜单中增加图书信息~~~\n"); printf("\n\t<按任意键返回管理菜单>\n\t"); input=getchar(); input=getchar(); tra_view(); //并返回游客进入画面 } else //存在的话则循环读取文件中的信息直到文件指针到达文件尾部 { do { fread(&bookview[i],sizeof(struct bookinf),1,fp); i=i+1; } while (!feof(fp)); //这一段代码以后也会经常用到 fclose(fp); //关闭文件指针 do { system("cls"); //显示读取数据的第一条,条数用变量n控制 printf("\n\t--------共有%d条记录--------",i-1); printf("\n\n\t编号: %d\n",bookview[n].num); printf("\n\t书名: %s\n",bookview[n].bname); printf("\n\t作者名: %s\n",bookview[n].wname); printf("\n\t分类号: %s\n",bookview[n].clanum); printf("\n\t出版单位: %s\n",bookview[n].pubcom); printf("\n\t出版时间: %s\n",bookview[n].pubtime); printf("\n\t价格: %f\n",bookview[n].price);
printf("\n\n\t1.上一页\t2.下一页\t3.回目录\n"); printf("\n\t请选择:"); scanf("%d",&inp); switch (inp) { case 1: //如果选择了上一页 { if (n==0) //如果n到首页则输出以下字样 { printf("\n\t已到达首页\n\t按任意键重新选择"); input=getchar(); input=getchar(); } else //否则就让n自减1跳出选择重复循环 { n=n-1; } break; } case 2: //如果选择了下一页 { if (n==i-2) //如果n到达最尾页 { printf("\n\t已到达最末页\n\t按任意键重新选择"); input=getchar(); input=getchar(); } else //否则就让n自加1跳出选择重复循环 { n=n+1; } break; } case 3: //选择3的话回到游客登陆界面 { tra_view(); break; } default: //没有这项选择时的提示 { printf("\n\t没有这项服务\n\t按任意键重新选择"); input=getchar(); input=getchar(); break; } } } while (inp!=3); }}
/*游客查询方式*/void tra_book_search(){ void tra_view(); void tra_id_search(); void tra_wr_search(); void tra_bn_search();
char input; FILE *fp; int inp; if((fp=fopen("book.dat","rb"))==NULL) //判断图书信息是否存在 { system("cls"); //不存在则打印的界面 printf("\n\n\n\t数据尚未初始化~~\n\n\t请在管理菜单中增加图书信息~~~\n"); printf("\n\t<按任意键返回管理菜单>\n\t"); input=getchar(); input=getchar(); tra_view(); } else { do //同以前一样用do{}while来重复显示 { system("cls"); printf("\n\n\n\t1.按图书编号查询\n"); printf("\n\t2.按图书作者查询\n"); printf("\n\t3.按图书名查询\n"); printf("\n\t4.回到主菜单\n"); printf("\n\n\t请选择查询类别:");
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-07-31

#include <malloc.h> 
#include <conio.h> 
#include <stdlib.h> 
#include <stdio.h> 
#include <string.h> 

#define len sizeof(Book) 

typedef struct Book{ 
char no[8]; //8位书号 
char name[20]; //书名 
char price[8]; //定价 
struct Book *next; 
}Book; 
Book *L; 
int b1,n1; 

void CreateList(){ 
int i,n; 
Book *p,*q; 
if(!b1){ 
L=(Book*)malloc(len); 
L->next=NULL; //生成只包含头结点的空链表 
b1=1; 
n1=0; 
p=L; 
printf("要输入的图书数为:"); 
scanf("%d",&n); 
for(i=1;i<=n;i++){ //通过n控制输入图书数 
q=(Book*)malloc(len); 
printf("请输入第%d个图书信息:\n",i); 
printf("书号:"); 
scanf("%s",q->no); 
printf("书名:"); 
scanf("%s",q->name); 
printf("定价:"); 
scanf("%s",q->price); 
q->next=L->next;L->next=q; 
n1=n1+1; 

}else 
{printf("已输入完毕,请插入信息!"); //每次执行程序只能生成一次链表,之后只能进行插入、删除操作 
getch();} 


void FindBook(){ 
char ch[20]; 
int s2=0; 
Book *p; 
p=L->next; 
printf("请输入图书名:"); 
scanf("%s",ch); 

while(p){ 
if(strcmp(p->name,ch)==0) //判断和查询图书名是否相等 
{printf("图书名:%-12.9s 书号:%-12.10s 定价:%s",p->name,p->no,p->price); //控制字符串输出的长度、格式 
s2=1; 
getch();} 
p=p->next; 

if(!s2) 
{ printf("没有该图书信息!"); 
getch();} 


void Getlocation(){ 
Book *p ; 

int i,j; 
p=L->next; //初始化,p指向第一个结点 
j=1;// j为计数器 
printf("请输入位置:"); 
scanf("%d",&i); 
while(p && j<i){ p=p->next; ++j; } 
if(!p||j>i) printf("ERROR"); //i大于表长或小于1 
printf("图书名:%-12.9s 书号:%-12.10s 定价:%s",p->name,p->no,p->price); 
getch(); 


void ListInsert(){ 
int j,i; 
Book *p,*s; 
p=L;j=0; 
printf("请输入位置:"); 
scanf("%d",&i); 
while (p&&j<i-1) {p=p->next;++j;} 
if(!p||j>i-1) printf("error"); 
s=(Book*)malloc(len); //生成新结点 
printf("请输入新的图书信息:\n"); 
printf("书号:"); 
scanf("%s",s->no); 
printf("书名:"); 
scanf("%s",s->name); 
printf("定价:"); 
scanf("%d",s->price); 
s->next=p->next; p->next=s; 
printf("插入成功!"); 
getch(); 




void ListDelete(){ 
int i,n; 
Book *p,*q; 
p=L; 
printf("请输入删除图书位置"); 
scanf("%d",&n); 
if(n>n1||n<=0){ 
printf("输入错误!"); //容错处理 
getch(); 

else{ 
for(i=1;i<n;i++) 
p=p->next ; 
q=p->next; p->next=q->next; 
free(q); //删除指定位置的学生信息 
n1--; 
printf("已将原表中第%d个 图书信息删除!",n); 
getch(); 



void ListLength(){ 
Book *p; 
int i; 
p=L->next; 
i=0; 
while(p){i++; 
p=p->next ;} 
printf("图书个数为:%d",i); 
getch(); 



void main(){ 
char c; 
while(1){ 
system("cls"); 
printf("**************************** 欢迎使用图书信息查询系统!*************************\n");//菜单选项 
printf("\n"); 
printf("(1)输入图书信息;\n"); 
printf("(2)根据图书名进行查找;\n"); 
printf("(3)根据指定位置进行查找;\n"); 
printf("(4)插入图书信息到指定位置;\n"); 
printf("(5)删除指定位置的图书记录;\n"); 
printf("(6)统计表中图书数;\n"); 
printf("\n"); 

c=getch(); 

switch(c){ 

case '1':CreateList();break; 
case '2':if(b1)FindBook(); //通过b1的值,控制先执行(1)的操作,即生成链表 
 else 
 {printf("请先输入图书信息!"); 
getch();};break; 
case '3':if(b1)Getlocation(); //通过b1的值,控制先执行(1)的操作,即生成链表 
 else 
 {printf("请先输入图书信息!"); 
getch();};break; 
case'4':if(b1)ListInsert(); //通过b1的值,控制先执行(1)的操作,即生成链表 
else 
{printf("请先输入图书信息!"); 
getch();};break; 
case '5':if(b1)ListDelete(); //通过b1的值,控制先执行(1)的操作,即生成链表 
 else 
 {printf("请先输入图书信息!"); 
getch();};break; 
case '6':if(b1)ListLength(); //通过b1的值,控制先执行(1)的操作,即生成链表 
 else 
 {printf("请先输入图书信息!"); 
getch();};break; 

default :printf("输入错误,请重新选择!"); 


}


本回答被提问者采纳
相似回答