模拟图书管理系统(简单c语言DOS界面)
2016-05-18 00:00
239 查看
摘要: 模拟图书管理系统(集体完成)
[code=plain]#include<stdio.h> #include<windows.h> #include<string.h> #include<io.h> #define FILE_PATH "G:\\book\\allBooks.txt" #define FILG_PATH "G:\\book\\index.txt" struct Book { int ID; //图书id char name[100];//图书名 double price; //价格 char author[100];//作者 int num; //总数量 int ifBorrowed;//是否借阅,0为没有,1为被借阅过 int currentNum;//剩余图书的数量 }; //图书数组全局 struct Book books[1000]; //图书ID int bookID; //添加图书下标 int index; //---------------------------管理员功能函数------------------------------------------------- //增加图书 void addBook() { //-------数据持久化操作 //如果文件不存在直接将全局数组写入文件中 /* if(!access(FILE_PATH,F_OK))//F_OK :文件存在 R_OK: 写入权限 { FILE *p=fopen(FILE_PATH,"w"); fwrite(books,sizeof(struct Book),index,p); fclose(p); FILE *m=fopen(FILG_PATH,"w"); fprintf(m,"%d",index); fclose(m); } else //如果文件存在了将读出所有数据赋值给全局变量 {*/ //读取 FILE *p=fopen(FILG_PATH,"r"); fscanf(p,"%d",&index); bookID=index; fclose(p); FILE *m=fopen(FILE_PATH,"r"); fread(books,sizeof(struct Book),1000,m); fclose(m); bookID=index; printf("请输入图书名字:"); scanf("%s",books[index].name); printf("请输入图书的价格:"); scanf("%lf",&(books[index].price)); printf("请输入作者:"); scanf("%s",books[index].author); printf("请输入图书的数量:"); scanf("%d",&(books[index].num)); books[index].ifBorrowed=0; books[index].currentNum=books[index].num; books[index].ID=++bookID; index++; //写入 ========================================== FILE *n=fopen(FILE_PATH,"w"); FILE *q=fopen(FILG_PATH,"w"); fwrite(books,sizeof(struct Book),index,n); fprintf(q,"%d",index); fclose(n); fclose(q); //================================================= // } } //删除图书 void deleteBook(int delID) { //文件不存在直接退出 // if(!access(FILE_PATH,F_OK)) // { // printf("文件不存在!"); // return; // } FILE *p=fopen(FILG_PATH,"r"); fscanf(p,"%d",&index); bookID=index; fclose(p); FILE *m=fopen(FILE_PATH,"r"); fread(books,sizeof(struct Book),1000,m); fclose(m); int delIndex=delID-1; if(bookID==0) { printf("图书库为空!\n"); } else if(delIndex>=index) { printf("不存在此图书!"); } //删除顺序表中最后一本图书 else if(index-1==delIndex) { bookID --; index --; printf("删除成功!"); } else { int i; for(i=delIndex;i<index-1;i++) { books[i]=books[i+1]; books[i].ID -= 1; } index --; bookID --; printf("删除成功!"); } //写入 FILE *n=fopen(FILE_PATH,"w"); FILE *q=fopen(FILG_PATH,"w"); fwrite(books,sizeof(struct Book),index,n); fprintf(q,"%d",index); fclose(n); fclose(q); } //查看所有图书 void showALLBooks() { // if(!access(FILE_PATH,F_OK)) // { // printf("文件不存在!"); // return; // } //读取 FILE *p=fopen(FILG_PATH,"r"); fscanf(p,"%d",&index); bookID=index; fclose(p); FILE *m=fopen(FILE_PATH,"r"); fread(books,sizeof(struct Book),1000,m); fclose(m); printf("|\t编号\t名称\t作者\t数量\t价格\t借阅\t余量|\n"); int i; for(i=0;i<index;i++) { printf("\t%d\t%s\t%s\t%d\t¥%g\t",books[i].ID,books[i].name,books[i].author,books[i].num,books[i].price); printf("%s\t",books[i].ifBorrowed==1 ?"是":"否"); printf("%d\n",books[i].currentNum); } } //查看所有借阅图书 void showALLBorrowedBooks() { //===================================================== /* if(!access(FILE_PATH,F_OK)) { printf("文件不存在!"); return; } */ //读取 FILE *p=fopen(FILG_PATH,"r"); fscanf(p,"%d",&index); bookID=index; fclose(p); FILE *m=fopen(FILE_PATH,"r"); fread(books,sizeof(struct Book),1000,m); fclose(m); //========================================================== int i; printf("----------------------借出图书预览--------------------------\n"); printf("\t编号\t名称\t作者\t数量\t价格\t借阅\t余量\n"); for(i=0;i<index;i++) { if(books[i].ifBorrowed==1) { printf("|\t%d\t%s\t%s\t%d\t¥%g\t",books[i].ID,books[i].name,books[i].author,books[i].num,books[i].price); printf("%s\t",books[i].ifBorrowed==1 ?"是":"否"); printf("%d|\n",books[i].currentNum); } } printf("------------------------------------------------------------\n"); } //--------------------------------------------------------------------------------- //------------------------------------用户功能函数------------------------------- void showAllBooks_User() { //===================================================== // if(!access(FILE_PATH,F_OK)) // { // printf("文件不存在!"); // return; // } //读取 FILE *p=fopen(FILG_PATH,"r"); fscanf(p,"%d",&index); bookID=index; fclose(p); FILE *m=fopen(FILE_PATH,"r"); fread(books,sizeof(struct Book),1000,m); fclose(m); //========================================================== printf("|\t编号\t名称\t作者\t数量\t可借阅\t余量|\n"); int i; for(i=0;i<index;i++) { printf("\t%d\t%s\t%s\t%d\t",books[i].ID,books[i].name,books[i].author,books[i].num); printf("%s\t",books[i].currentNum!=0 ?"是":"否"); printf("%d\n",books[i].currentNum); } } void borrowBook()//借书 { //===================================================== //读取 FILE *p=fopen(FILG_PATH,"r"); fscanf(p,"%d",&index); bookID=index; fclose(p); FILE *m=fopen(FILE_PATH,"r"); fread(books,sizeof(struct Book),1000,m); fclose(m); //========================================================== printf("请输入所借图书ID:"); int borrowID; scanf("%d",&borrowID); printf("请输入借阅的数量:"); int borrowNum; scanf("%d",&borrowNum); if(borrowID>index||borrowID<=0) { printf("选择错误"); } else { if(borrowNum>books[borrowID-1].currentNum) { printf("图书余量不够!\n"); } else { books[borrowID-1].currentNum-=borrowNum; books[borrowID-1].ifBorrowed=1; printf("借阅成功!\n"); } } //写入 ========================================== FILE *n=fopen(FILE_PATH,"w"); // FILE *q=fopen(FILG_PATH,"w"); fwrite(books,sizeof(struct Book),index,n); // fprintf(q,"%d",index); fclose(n); // fclose(m); //================================================= } void returnBook() { //===================================================== //读取 FILE *p=fopen(FILG_PATH,"r"); fscanf(p,"%d",&index); bookID=index; fclose(p); FILE *m=fopen(FILE_PATH,"r"); fread(books,sizeof(struct Book),1000,m); fclose(m); //========================================================== printf("请输入要还书的ID:"); int returnID; int returnNum; scanf("%d",&returnID); printf("\n请输入还书的数量:"); scanf("%d",&returnNum); if(returnID<=0||returnID>index) { printf("不存在这本书\n"); } else {//如果还书的数量大于借出的总量,错误 if(returnNum>(books[returnID-1].num-books[returnID-1].currentNum)) { printf("还书错误\n"); } else if(returnNum==(books[returnID-1].num-books[returnID-1].currentNum)) {//如果全部还完 是否借阅设为 否 books[returnID-1].currentNum+=returnNum; books[returnID-1].ifBorrowed=0; printf("还书成功\n"); Sleep(3000); } else{// books[returnID-1].currentNum+=returnNum; printf("还书成功\n"); Sleep(3000); } } //写入 FILE *n=fopen(FILE_PATH,"w"); FILE *q=fopen(FILG_PATH,"w"); fwrite(books,sizeof(struct Book),index,n); fprintf(q,"%d",index); fclose(n); fclose(q); } //-------------------------------------------------------------------------------- //主页面 int indexViewShow() { system("cls"); printf("-----------欢迎使用图书管理系统-----------------\n"); printf("| |\n"); printf("| 管理员请选 1 |\n"); printf("| 用户请选 2 |\n"); printf("| 退出请选 3 |\n"); printf("------------------------------------------------\n"); int chioce; printf("请选择: "); scanf("%d",&chioce); return chioce; } //管理员 int managerViewShow() { system("cls"); printf("----------------管理员---------------------------\n"); printf("| |\n"); printf("| 增加图书请选1 |\n"); printf("| 删除图书请选2 |\n"); printf("| 查看图书请选3 |\n"); printf("| 查看借阅图书 4 |\n"); printf("| 返回上级页面请按5 |\n"); printf("------------------------------------------------\n"); int chioce; printf("请选择: "); scanf("%d",&chioce); return chioce; } //用户页面 int userViewShow() { system("cls"); printf("----------------用--户---------------------------\n"); printf("| |\n"); printf("| 查看图书请选1 |\n"); printf("| 借阅图书请选2 |\n"); printf("| 归还图书请选3 |\n"); printf("| 返回上级页面请按4 |\n"); printf("-------------------------------------------------\n"); int chioce; printf("请选择: "); scanf("%d",&chioce); return chioce; } int main() { int chose; do{ chose=indexViewShow(); switch(chose) { case 1://管理员 { int manageChose; do { manageChose=managerViewShow(); switch(manageChose) { case 1: //增加图书 { char chioce[20]; do { addBook(); printf("\n继续添加请按: y,否则请选: n:"); scanf("%s",chioce); }while(strcmp(chioce,"y")==0); } break; case 2://删除图书 { showALLBooks(); printf("输入要删除图书的ID,退出请选esc"); int deleteID; scanf("%d",&deleteID); printf("确认删除编号为%d的书请按 :y\t",deleteID); char chose[2]; scanf("%s",chose); if((strcmp(chose,"y")==0)||(strcmp(chose,"Y")==0)) { deleteBook(deleteID); Sleep(2000); } } break; case 3://查看图书 { char chioce[20]; showALLBooks(); printf("退出请选y: "); do { scanf("%s",chioce); }while(strcmp(chioce,"y")!=0); // Sleep(5000); } break; case 4://查看所有借阅图书 { char chioce[20]; showALLBorrowedBooks(); printf("退出请选y: "); do { scanf("%s",chioce); }while(strcmp(chioce,"y")!=0); } break; case 5: break; default:printf("输入有误,请重新选择");Sleep(2000); } }while(manageChose!=5); } break; case 2:// { int userChose;//用户 do { userChose=userViewShow(); switch(userChose) { case 1://查看图书 { char chioce[20]; showAllBooks_User(); printf("退出请选y: "); do { scanf("%s",chioce); }while(strcmp(chioce,"y")!=0); } break; case 2://借阅 { showAllBooks_User(); char chioce[20]; do { borrowBook(); printf("继续借阅请选y,退出请选n"); scanf("%s",chioce); }while(strcmp(chioce,"y")==0); } break; case 3: { returnBook(); } break;//归还 case 4: break;//返回上级 default:printf("输入有误,请重新选择");Sleep(2000);break; } }while(userChose!=4); }break; case 3:// { break; } default: printf("输入有误,请重新选择\n");Sleep(1000);break; } }while(chose!=3); printf("谢谢使用图书管理系统\n5秒后将自动退出\n");Sleep(5000); return 0; }
相关文章推荐
- 如何组织构建多文件 C 语言程序(二)
- 如何写好 C main 函数
- Lua和C语言的交互详解
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- C语言编程中统计输入的行数以及单词个数的方法
- C语言自动生成enum值和名字映射代码
- C语言练习题:自由落体的小球简单实例
- 使用C语言判断英文字符大小写的方法
- c语言实现的带通配符匹配算法
- C语言实现顺序表基本操作汇总
- C语言中进制知识汇总
- C语言中计算正弦的相关函数总结
- 使用C语言详解霍夫曼树数据结构
- C语言实现选择排序、冒泡排序和快速排序的代码示例
- 探讨C语言的那些小秘密之断言