C/C++实现图书信息管理系统
本文实例为大家分享了c/c++实现图书信息管理系统的具体代码,供大家参考,具体内容如下
程序流程图
源代码
#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);
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
以上是 C/C++实现图书信息管理系统 的全部内容, 来源链接: utcz.com/p/247793.html