c++图书信息管理系统
呆橘丶 人气:1程序流程图
源代码
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <conio.h> #include <windows.h> #define N 100 struct type{ char ISBN[N];//ISBN编号(一般为13位) char bookName[N]; //书名 char subject[N];//科目 char editor[N];//主编 float price;//价格 char publish[N];//出版社 char date[N];//日期 int num;//数量 struct type *next; }Book; typedef struct type * BooksManage; void color(short x);//字体颜色 int password();//管理员密码 void AdministratorMenu();//管理员菜单 void VisitorMenu();//游客菜单 void SaveBooksdata(BooksManage head);//将数据保存到文件中 void AddBooks(BooksManage *head);//添加图书信息 void ReadBooksdata(BooksManage *head);//将数据从文件中读取 void DelBooks_Subject(BooksManage head);//按所属学科删除图书信息 void DelBooks_ISBN(BooksManage head);//按ISBN删除图书信息 void ModifyBooks(BooksManage head);//修改图书信息 void FindBooks(BooksManage head);//查询图书信息 void PrintBooks(BooksManage head);//显示所有图书信息 void SumBooks(BooksManage head);//求全部图书价值 int main() { color(10); printf("\t\t\t\t\t* * * * * * * * * * * * * *\n"); color(14); printf("\t\t\t\t\t* 题目:图书信息管理系统 *\n"); color(11); printf("\t\t\t\t\t* 班级: *\n"); color(12); printf("\t\t\t\t\t* 组员 *\n"); color(11); printf("\t\t\t\t\t* 姓名 学号 *\n"); color(10); printf("\t\t\t\t\t* 张三 100001 *\n"); color(11); printf("\t\t\t\t\t* 李四 100002 *\n"); color(14); printf("\t\t\t\t\t* 王五 100003 *\n"); color(12); printf("\t\t\t\t\t* 日期 : 2019.03.19 *\n"); color(10); printf("\t\t\t\t\t* * * * * * * * * * * * * *\n"); system("title 图书信息管理系统"); color(10); BooksManage head = NULL; ReadBooksdata(&head); int choice,z,c; printf("\n\n\n"); printf("\t\t\t※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n"); printf("\t\t\t\t\t\t欢迎光临图书信息管理系统\n"); printf("\t\t\t--------------------------------------------------------\n"); printf("\t\t\t\t\t\t【1】游客\n"); printf("\t\t\t\t\t\t【2】管理员\n"); printf("\t\t\t\t\t\t【3】退出系统\n"); printf("\t\t\t--------------------------------------------------------\n"); while(printf("\t\t\t\t\t\t请选择身份:")&&scanf("%d",&c)!=EOF) { if(c==1) { VisitorMenu(); while (printf("\t\t\t\t\t\t请输入选择项(1-3):")&&scanf("%d",&choice)!=EOF) { switch (choice) { case 1: /*查询图书信息*/ FindBooks(head); break; case 2: /*显示所有图书信息*/ PrintBooks(head); break; case 3: /*返回登录界面*/ main(); break; case 4: exit(0); default: printf("\t\t\t\t\t输入错误!!!\n"); system("pause"); break; } VisitorMenu(); } } else if(c==2) { z = password(); AdministratorMenu(); while (printf("\t请输入选择项(1-8):") && z == 1 && scanf("%d",&choice) != EOF) { switch (choice) { case 1: /*录入图书信息*/ AddBooks(&head); break; case 2: /*删除图书信息*/ int sign; system("cls"); color(10);printf("\t\t\t* * * * * * * * * * * * * * *\n"); color(11);printf("\t\t\t*---------------------------*\n"); color(12);printf("\t\t\t* 输入选择删除图书的方式 *\n"); color(14);printf("\t\t\t*---------------------------*\n"); color(11);printf("\t\t\t*【 1】按所属学科删除图书 *\n"); color(12);printf("\t\t\t*---------------------------*\n"); color(14);printf("\t\t\t*【 2】按图书ISBN号删除图书 *\n"); color(11);printf("\t\t\t*---------------------------*\n"); color(10);printf("\t\t\t* * * * * * * * * * * * * * *\n"); scanf("\t\t\t%d",&sign); if(sign == 1) DelBooks_Subject(head); else if(sign == 2) DelBooks_ISBN(head); break; case 3: ModifyBooks(head); break; case 4: FindBooks(head); break; case 5: PrintBooks(head); break; case 6: SumBooks(head); break; case 7: main(); break; case 8: SaveBooksdata(head); exit(0); default: printf("\t输入错误!!!\n"); system("pause"); break; } AdministratorMenu(); } } else if(c==3) exit(0); else { printf("\t\t\t输入错误!!!\n\n"); } } return 0; } /**管理员密码*/ int password() { int i=0; char user[10]="admin"; char Code[10]="admin"; char getuser[10]; char Getskey[10]; while(1) { printf("\t\t\t请输入账号:"); scanf("%s",getuser); printf("\t\t\t请输入密码:"); while(1) { Getskey[i]=getch(); /*getch()函数在头文件conio.h中,函数作用为输入的内容不会在屏幕上显示*/ if(Getskey[i]=='\r') /* \b = 退格键(backspace)*/ break; /* \r = 回车键(carrige return)*/ else if(Getskey[i]=='\b') { if(i==0) continue; printf("\b"); printf(" "); printf("\b"); i--; } else { printf("*"); i++; } } Getskey[i]='\0'; if(strcmp(user, getuser) == 0 && strcmp(Code, Getskey) == 0){ printf("\n\n\n\t\t\t密码正确,请稍等"); printf("."); Sleep(300); printf("."); Sleep(300); printf("."); Sleep(300); printf("."); Sleep(300); printf("."); Sleep(300); printf("."); Sleep(300); return 1; } else { printf("\n\n\t\t\t账号不存在或密码输入错误,请重新输入\n"); i = 0; } } } /**管理员菜单*/ void AdministratorMenu() { system("cls");//清屏 printf("\n\n\n\n\n"); printf("\t************************************************************\n"); printf("\t* *\n"); printf("\t* 欢迎来到图书信息管理系统 *\n"); printf("\t* *\n"); printf("\t* *\n"); printf("\t* 主菜单 *\n"); printf("\t* *\n"); printf("\t* 1.录入图书信息 *\n"); printf("\t* *\n"); printf("\t* 2.删除图书信息 *\n"); printf("\t* *\n"); printf("\t* 3.修改图书信息 *\n"); printf("\t* *\n"); printf("\t* 4.查询图书信息 *\n"); printf("\t* *\n"); printf("\t* 5.显示所有图书信息 *\n"); printf("\t* *\n"); printf("\t* 6.全部图书的总价值 *\n"); printf("\t* *\n"); printf("\t* 7.返回登录界面 *\n"); printf("\t* *\n"); printf("\t* 8.保存数据并退出系统 *\n"); printf("\t* *\n"); printf("\t************************************************************\n\n"); } /**游客菜单*/ void VisitorMenu() { system("cls"); printf("\n\n\n\n\n"); printf("\t************************************************************\n"); printf("\t* *\n"); printf("\t* 欢迎来到图书信息管理系统 *\n"); printf("\t* *\n"); printf("\t* *\n"); printf("\t* 主菜单 *\n"); printf("\t* *\n"); printf("\t* 1.查询图书信息 *\n"); printf("\t* *\n"); printf("\t* 2.显示所有图书信息 *\n"); printf("\t* *\n"); printf("\t* 3.返回登录界面 *\n"); printf("\t* *\n"); printf("\t* 4.退出系统 *\n"); printf("\t* *\n"); printf("\t************************************************************\n\n"); } /*将数据保存到文件中*/ void SaveBooksdata(BooksManage head) { BooksManage p; FILE *fp; fp = fopen("BooksDatabase.txt","w"); p = head->next; while(p->next != NULL){ fprintf(fp,"%s\t",p->ISBN); fprintf(fp,"%s\t",p->bookName); fprintf(fp,"%s\t",p->subject); fprintf(fp,"%s\t",p->editor); fprintf(fp,"%.2f\t",p->price); fprintf(fp,"%s\t",p->publish); fprintf(fp,"%s\t",p->date); fprintf(fp,"%d\n",p->num); p=p->next; } if(p->next == NULL){ fprintf(fp,"%s\t",p->ISBN); fprintf(fp,"%s\t",p->bookName); fprintf(fp,"%s\t",p->subject); fprintf(fp,"%s\t",p->editor); fprintf(fp,"%.2f\t",p->price); fprintf(fp,"%s\t",p->publish); fprintf(fp,"%s\t",p->date); fprintf(fp,"%d",p->num); } fclose(fp); return ; } /**将数据从文件中读取*/ void ReadBooksdata(BooksManage *head) { int n; BooksManage s, p; FILE *fp; fp=fopen("BooksDatabase.txt","r"); if(NULL == fp) { head = NULL; return ; } *head = (BooksManage)calloc(1, sizeof(Book)); p = *head; while (!feof(fp)) { s = (BooksManage)calloc(1, sizeof(Book)); fscanf(fp,"%s",s->ISBN); /*为下个结点分配内存空间 */ fscanf(fp,"%s",s->bookName); fscanf(fp,"%s",s->subject); fscanf(fp,"%s",s->editor); fscanf(fp,"%f",&s->price); fscanf(fp,"%s",s->publish); fscanf(fp,"%s",s->date); fscanf(fp,"%d",&s->num); p->next=s; /*保存该结点*/ p=p->next; /*切换到下一个结点*/ p->next=NULL; /*保证最后一个结点为NULL*/ } fclose(fp);/*关闭文件 */ return ; } /**字体颜色*/ void color(short x) { if(x>=0 && x<=15) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), x); else SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7); } /**添加图书信息*/ void AddBooks(BooksManage *head) { int i; BooksManage p, s; system("cls"); if(*head == NULL) { *head = (BooksManage)calloc(1,sizeof(Book)); p = *head; } else { p = *head; while(p->next) p = p->next; } printf("\n\n\n"); printf("\t※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n"); printf("\t\t\t请问添加几本书:"); scanf("%d",&i); printf("\t--------------------------------------------------------\n"); while(i) { s = (BooksManage)calloc(1,sizeof(Book)); printf("\t\t\t请输入ISBN号:"); scanf("%s",s->ISBN); printf("\t--------------------------------------------------------\n"); printf("\t\t\t请输入书名:"); scanf("%s",s->bookName); printf("\t--------------------------------------------------------\n"); printf("\t\t\t请输入书本的所属学科:"); scanf("%s",s->subject); printf("\t--------------------------------------------------------\n"); printf("\t\t\t请输入主编:"); scanf("%s",s->editor); printf("\t--------------------------------------------------------\n"); printf("\t\t\t请输入价格:"); scanf("%f",&s->price); printf("\t--------------------------------------------------------\n"); printf("\t\t\t请输入出版社:"); scanf("%s",s->publish); printf("\t--------------------------------------------------------\n"); printf("\t\t\t请输入出版日期:"); scanf("%s",s->date); printf("\t--------------------------------------------------------\n"); printf("\t\t\t请输入数量:"); scanf("%d",&s->num); printf("\t--------------------------------------------------------\n"); printf("\n"); printf("\t--------------------------------------------------------\n"); i--; p->next = s; /*保存输进去的这个结点*/ p = p->next; /*切换到下一个结点*/ p->next = NULL; /*最后一个结点为NULL*/ } printf("\t\t\t图书添加成功!!!\n"); system("pause"); } /*按所属学科删除图书信息*/ void DelBooks_Subject(BooksManage head) { system("cls"); int flag=0; char name[100],ch[10]; BooksManage p, t; /**如果表头为空 */ if(head == NULL || head->next == NULL) { printf("没有记录图书信息!\n"); system("pause"); return; } p = head; printf("\n\n\n"); printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n"); printf("请输入要删除的学科名字;"); scanf("%s",&name); printf("------------------------------------------------------------------------------------\n"); printf("ISBN\t书名\t所属学科\t主编\t价格\t出版单位\t出版时间\t数量\n"); printf("------------------------------------------------------------------------------------\n"); while(p->next) { t=p; p=p->next; /*转换到下一个结点*/ if(strcmp(name,p->subject)==0) { flag=1; printf("%s\t%s\t%s\t\t%s\t%.2f\t%s\t\t%s\t%d\n",p->ISBN,p->bookName,p->subject,p->editor,p->price,p->publish,p->date,p->num); break; } } if(flag==1) { printf("是否删除该本图书信息(y/n)"); scanf("%s",ch); printf("----------------------------------------------------------------------\n"); if(strcmp(ch,"Y") == 0 || strcmp(ch,"y") == 0) { t->next = p->next; free(p); printf("该书已删除!\n"); } else return; } else if(flag == 0) printf("没找到那本书!\n"); system("pause"); } /*按ISBN删除图书信息*/ void DelBooks_ISBN(BooksManage head) { system("cls"); int flag=0; char ch[10]; char ISBN[N]; BooksManage p, t; /**如果表头为空 */ if(head == NULL || head->next == NULL) { printf("没有记录图书信息!\n"); system("pause"); return; } p = head; printf("\n\n\n"); printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n"); printf("请输入要删除图书的ISBN号;"); scanf("%s",ISBN); printf("------------------------------------------------------------------------------------\n"); printf("ISBN\t书名\t所属学科\t主编\t价格\t出版单位\t出版时间\t数量\n"); printf("------------------------------------------------------------------------------------\n"); while(p->next) { t=p; p=p->next; /*转换到下一个结点*/ if(strcmp(ISBN,p->ISBN)==0) { flag=1; printf("%s\t%s\t%s\t\t%s\t%.2f\t%s\t\t%s\t%d\n",p->ISBN,p->bookName,p->subject,p->editor,p->price,p->publish,p->date,p->num); break; } } if(flag==1) { printf("是否删除该本图书信息(y/n)"); scanf("%s",ch); printf("----------------------------------------------------------------------\n"); if(strcmp(ch,"Y") == 0 || strcmp(ch,"y") == 0) { t->next = p->next; free(p); printf("该书已删除!\n"); } else return; } else if(flag == 0) printf("没找到那本书!\n"); system("pause"); } /*修改图书信息*/ void ModifyBooks(BooksManage head) { system("cls"); int flag=0; char name[100],ch[5]; BooksManage p, t; /* 如果表头为空 */ if(head == NULL || head->next == NULL) { printf("没有记录图书信息!\n"); system("pause"); return ; } p = head; printf("\n\n\n"); printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n"); printf("请输入要修改的书名:"); scanf("%s",name); printf("--------------------------------------------------------------------\n"); while(p->next) { p=p->next; /*切换到下一个结点*/ if(strcmp(name,p->bookName)==0) { flag = 1; t = p; printf("ISBN\t书名\t所属学科\t主编\t价格\t出版单位\t出版时间\t数量\n"); printf("------------------------------------------------------------------------------------\n"); printf("%s\t%s\t%s\t\t%s\t%.2f\t%s\t\t%s\t%d\n",p->ISBN,p->bookName,p->subject,p->editor,p->price,p->publish,p->date,p->num); } } if(flag==1) { printf("--------------------------------------------------------------------\n"); printf("\t\t是否修改该本图书信息(y/n):"); scanf("%s",ch); printf("\t--------------------------------------------------------------------\n"); if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0) { int c; printf("\t\t【1】ISBN号\n"); printf("--------------------------------------------------------------------\n"); printf("\t\t【2】书名\n"); printf("--------------------------------------------------------------------\n"); printf("\t\t【3】所属学科\n"); printf("--------------------------------------------------------------------\n"); printf("\t\t【4】主编\n"); printf("--------------------------------------------------------------------\n"); printf("\t\t【5】价格\n"); printf("--------------------------------------------------------------------\n"); printf("\t\t【6】出版社\n"); printf("--------------------------------------------------------------------\n"); printf("\t\t【7】出版日期\n"); printf("--------------------------------------------------------------------\n"); printf("\t\t【8】数量\n"); printf("--------------------------------------------------------------------\n"); printf("\t请输入你要修改的内容;"); scanf("%d",&c); printf("--------------------------------------------------------------------\n"); p = t; switch(c) { case 1: printf("\t请输入ISBN号:"); scanf("%s",p->ISBN); break; case 2: printf("\t请输入书名:"); scanf("%s",p->bookName); break; case 3: printf("\t请输入所属学科:"); scanf("%s",p->subject); break; case 4: printf("\t请输入主编:"); scanf("%s",p->editor); break; case 5: printf("\t请输入价格:"); scanf("%f",&p->price); break; case 6: printf("\t请输入出版社:"); scanf("%s",p->publish); break; case 7: printf("\t请输入出版日期:"); scanf("%s",p->date); break; case 8: printf("\t请输入数量:"); scanf("%d",&p->num); break; } printf("--------------------------------------------------------------------\n"); printf("\t修改成功!!!\n"); } } else if(flag == 0) printf("对不起,该书库没有该书\n"); system("pause"); } /**显示所有图书信息*/ void PrintBooks(BooksManage head) { BooksManage p; system("cls"); /**如果表头为空 */ if(head == NULL || head->next == NULL) { printf("没有记录图书信息!\n"); system("pause");//提示任意键继续 return ; } p = head->next; printf("\n\n\n"); printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n"); printf(" 图书列表\n"); printf("------------------------------------------------------------------------------------\n"); printf("ISBN\t书名\t所属学科\t主编\t价格\t出版单位\t出版时间\t数量\n"); printf("------------------------------------------------------------------------------------\n"); do { printf("%s\t%s\t%s\t\t%s\t%.2f\t%s\t\t%s\t%d\n",p->ISBN,p->bookName,p->subject,p->editor,p->price,p->publish,p->date,p->num); p = p->next; }while(p!=NULL); system("pause"); } /**求全部图书价值*/ void SumBooks(BooksManage head){ float sum = 0; system("cls"); BooksManage p; /* 如果表头为空 */ if(head == NULL || head->next == NULL) { printf("\t\t\t\t没有图书信息!\n"); return; } for(p = head;p != NULL; p = p->next){ sum += p->price * p->num; } printf("\n\n\n\n\n\n"); printf("\t\t\t***********************************\n"); color(12);printf("\t\t\t* 全部图书的总价值为:%.2f *\n",sum); color(10);printf("\t\t\t***********************************\n"); system("pause"); } /*查询图书信息*/ void FindBooks(BooksManage head) { system("cls"); int choose,flag = 0; BooksManage p; char b[100]; char ISBN[N]; /* 如果表头为空 */ if(head == NULL || head->next == NULL) { printf("没有记录图书信息!\n"); system("pause"); return ; } do { system("cls"); printf("\n\n\n"); printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n"); printf("\t\t1.按书名查找\n"); printf("----------------------------------------------------------------------\n"); printf("\t\t2.按ISBN号查找\n"); printf("----------------------------------------------------------------------\n"); printf("\t\t返回主菜单(其他数字)\n"); printf("----------------------------------------------------------------------\n"); printf("\t\t请输入您的选择:"); scanf("%d",&choose); printf("----------------------------------------------------------------------\n"); p=head; if(choose == 1) { printf("输入所查书名:"); scanf("%s",b); printf("----------------------------------------------------------------------\n\n"); while(p->next) { p=p->next; /*转换到下一个结点*/ if(strcmp(b,p->bookName)==0) /*判断是否找到并输出*/ { flag=1; printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n"); printf("ISBN\t书名\t所属学科\t主编\t价格\t出版单位\t出版时间\t数量\n"); printf("------------------------------------------------------------------------------------\n"); printf("%s\t%s\t%s\t\t%s\t%.2f\t%s\t\t%s\t%d\n",p->ISBN,p->bookName,p->subject,p->editor,p->price,p->publish,p->date,p->num); } } if(flag==0) printf("不存在该信息\n"); } else if(choose==2) { printf("输入所查ISBN号:"); scanf("%s",ISBN); printf("----------------------------------------------------------------------\n\n"); while(p->next) { p=p->next; /*转换到下一个结点*/ if(strcmp(p->ISBN,ISBN) == 0) /*判断是否找到并输出*/ { flag=1; printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n"); printf("ISBN\t书名\t所属学科\t主编\t价格\t出版单位\t出版时间\t数量\n"); printf("------------------------------------------------------------------------------------\n"); printf("%s\t%s\t%s\t\t%s\t%.2f\t%s\t\t%s\t%d\n",p->ISBN,p->bookName,p->subject,p->editor,p->price,p->publish,p->date,p->num); } } if(flag == 0) printf("不存在该信息\n"); } else return; system("pause"); }while(1); }
加载全部内容