数据结构c语言课程设计 图书管理系统

我做的是百度文库的第28题,目前没有报错,正常运行,但是还有一点小bug。代码很多地方写的不是很好,请多多包涵。

账号1,密码1,为管理员账号;其他账号2,3,4,5,密码2,3,4,5,为普通用户




退出后数据会保留到当前文件夹的csv文件中,可用excel编辑,下次打开时会再次进行读取数据。

下面是最新的运行不会出错的,剩下的我放到了gitee上了,点这

#include <stdio.h>
#include <stdlib.h>  //清屏函数需要的头文件
#include <string.h>  //字符复制,比较,连接函数需要的头文件
#include <time.h>    //获取时间的函数需要的头文件
#include <conio.h>   //输入不实时打印函数需要的头文件
#include <ctype.h>   //判断是否能打印函数需要的头文件
#include <windows.h> //改变字体颜色需要的头文件#define MAXSIZE 100struct INF //用户基本信息结构体
{int tes;char name[MAXSIZE];char id[MAXSIZE];char passwd[MAXSIZE];char booknum[MAXSIZE][MAXSIZE]; //记录书号int bookn;                      //变量,用来存储书的标记号int booknu[MAXSIZE];            //记入每种书借了多少本int y[MAXSIZE];int m[MAXSIZE];int d[MAXSIZE];
};
typedef struct Node //存储书籍基本信息的结构体
{char num[MAXSIZE];char name[MAXSIZE];char author[MAXSIZE];int bookflag;int now;int all;struct Node *next;
} Node, *LinkList;INF inf[MAXSIZE];
int logout = 0;
int fl = 0;int main();
int login(int); //登录系统int init(LinkList &); //书籍信息初始化
void initinf();       //添加5个用户 管理员账户为1,密码为1;普通账户2,3,4,5,密码分别为2,3,4,5。int in(LinkList &); //录入书籍信息void switchl(LinkList &, int);           //选择借阅书籍方式
int lend(LinkList &, char *, int, int);  //通过书号借阅书籍
int lend1(LinkList &, char *, int, int); //通过书名借出书籍void switchr(LinkList &, int);              //选择归还书籍方式
int returnb(LinkList &, char *, int, int);  //通过书号归还书籍
int returnb1(LinkList &, char *, int, int); //通过书名归还书籍int show(LinkList &);     //显示图书馆中所有书籍
int own(LinkList &, int); //查看自己借的书籍以及归还时间int bookdataw(LinkList &);      //存储图书馆中所有书籍数据
int bookdatar(LinkList &);      //读取存储图书馆中所有书籍的数据
int userdataw(LinkList &, int); //存储用户借阅所有书籍数据
int userdatar(int);             //读取用户借阅所有书籍数据void color(short);        //改变字体颜色
void getpwd(char *, int); //密码转星号int main()
{int flag0 = 0;printf("\t\t\t\t\t\t欢迎来到海南大学图书管理系统\n");do{char tell[MAXSIZE], pas[MAXSIZE];int r = 0, r1, r2 = 0;int flag1 = 0, flag2 = 0; //循环标志inf[0].tes = 0;initinf();do{printf("\t\t请输入你的账号:");scanf("%s", tell);fflush(stdin);if (inf[0].tes == 0){color(4);printf("没有录入学生!\n");color(16);flag0 = 1;}if (!strcmp(tell, "\r"))flag1 = 1;while (strcmp(inf[r].id, tell) && strcmp(tell, "\r")){if (r >= MAXSIZE){color(4);printf("不存在此用户!!\n");color(16);flag1 = 1;break;}else{flag1 = 0;flag0 = 0;}r++;}r1 = r;if (!strcmp(inf[r].id, tell)){flag0 = 0;flag1 = 0;}r = 0;} while (flag1);if (flag0 == 1)break;do //用户输入密码{printf("\t\t请输入你的密码:");r2++;getpwd(pas, MAXSIZE + 1);fflush(stdin);if (r2 > 2){system("cls");color(4);printf("密码输入错误超过3次,请检查你的账号是否正确!!\n");color(16);flag0 = 1;break;}if (strcmp(inf[r1].passwd, pas)){color(4);printf("密码错误,请重新输入!\n");color(16);flag2 = 1;}else //账户密码正确,登录系统{system("cls"); //使用system("cls")出现bug,启用手动清屏flag2 = 0;flag0 = 0;login(r1);}} while (flag2);} while (flag0);
}int login(int r2) //登录系统
{int a, flag = 0;LinkList Ctr;bookdatar(Ctr);userdatar(r2);if (logout == 1)init(Ctr);logout = 0;while (!flag){if (r2 == 0){if (fl == 0){printf("\t\t\t\t\t%s,欢迎来到海南大学图书管理系统\n", inf[r2].name);fl++;}else{printf("\t\t\t\t\t\t请选择:\n");}printf("\t\t\t\t\t\t1.采编入库\n""\t\t\t\t\t\t2.借阅\n""\t\t\t\t\t\t3.归还\n""\t\t\t\t\t\t4.查看图书馆书籍\n""\t\t\t\t\t\t5.查看已借阅书籍\n""\t\t\t\t\t\t6.注销\n""\t\t\t\t\t\t7.退出\n");printf("\t\t\t\t\t请选择你的操作:");scanf("%d", &a);fflush(stdin);switch (a){case 1:in(Ctr);bookdataw(Ctr);break;case 2:if (Ctr->next == NULL){color(4);printf("\t\t\t图书馆还未采购书籍,请采购\n");color(16);break;}else{switchl(Ctr, r2);userdataw(Ctr, r2);bookdataw(Ctr);break;}case 3:if (Ctr->next == NULL){color(4);printf("\t\t\t\t\t\t图书馆还未采购书籍,请采购!\n");color(16);break;}else{switchr(Ctr, r2);userdataw(Ctr, r2);bookdataw(Ctr);break;}case 4:if (Ctr->next == NULL){color(4);printf("\t\t\t\t\t\t图书馆还未采购书籍,请采购!\n");color(16);break;}else{show(Ctr);break;}case 5:own(Ctr, r2);break;case 6:system("cls");main();logout = 1;break;case 7:printf("\t\t\t\t按任意键退出...");getch();flag = 1;break;default:system("cls");color(4);printf("\t\t\t\t\t\t不存在此操作,请重新选择!!!\n");color(16);break;}}else{bookdataw(Ctr);if (fl == 0){printf("\t\t\t\t\t%s,欢迎来到海南大学图书管理系统\n", inf[r2].name);fl++;}else{printf("\t\t\t\t\t\t请选择:\n");}printf("\t\t\t\t\t\t1.借阅\n""\t\t\t\t\t\t2.归还\n""\t\t\t\t\t\t3.查看书籍\n""\t\t\t\t\t\t4.查看已借阅书籍\n""\t\t\t\t\t\t5.注销\n""\t\t\t\t\t\t6.退出\n");printf("\t\t\t\t\t请选择你的操作:");scanf("%d", &a);fflush(stdin);switch (a){case 1:if (Ctr->next == NULL){color(4);printf("\t\t\t图书馆还未采购书籍,请等待几天再试!\n");color(16);break;}else{switchl(Ctr, r2);userdataw(Ctr, r2);break;}case 2:if (Ctr->next == NULL){color(4);printf("\t\t\t图书馆还未采购书籍,请等待几天再尝试!\n");color(16);break;}else{switchr(Ctr, r2);userdataw(Ctr, r2);break;}case 3:if (Ctr->next == NULL){color(4);printf("\t\t\t图书馆还未采购书籍,请等待几天再尝试!\n");color(16);break;}else{show(Ctr);break;}case 4:own(Ctr, r2);break;case 5:system("cls");main();break;case 6:printf("\t\t\t\t按任意键退出...");getch();flag = 1;break;default:system("cls");color(4);printf("\t\t\t\t\t\t不存在此操作,请重新选择!!!\n");color(16);break;}}}return 1;
}
int init(LinkList &L) //书籍信息初始化
{LinkList L0;L = (LinkList)malloc(sizeof(Node));L0 = (LinkList)malloc(sizeof(Node));L0->bookflag = 0;L->next = NULL;L0->next = L->next;L->next = L0;return 1;
}
void initinf() //添加5个用户
{strcpy(inf[0].id, "1"); //张三为超级管理员,可以添加书籍strcpy(inf[0].name, "张三");strcpy(inf[0].passwd, "1");strcpy(inf[1].id, "2");strcpy(inf[1].name, "李四");strcpy(inf[1].passwd, "2");strcpy(inf[2].id, "3");strcpy(inf[2].name, "王五");strcpy(inf[2].passwd, "3");strcpy(inf[3].id, "4");strcpy(inf[3].name, "赵六");strcpy(inf[3].passwd, "4");strcpy(inf[4].id, "5");strcpy(inf[4].name, "孙七");strcpy(inf[4].passwd, "5");inf[0].tes = 1; //查看是否有用户inf[0].bookn = 0;inf[1].bookn = 0;inf[2].bookn = 0;inf[3].bookn = 0;inf[4].bookn = 0;for (int s = 0; s < MAXSIZE; s++){inf[0].booknu[s] = 0;inf[1].booknu[s] = 0;inf[2].booknu[s] = 0;inf[3].booknu[s] = 0;inf[4].booknu[s] = 0;}
}
int in(LinkList &L) //录入书籍信息
{system("cls");printf("\t\t\t开始录入书籍\n");LinkList s, pre;int c3;int flag = 1;while (flag){s = (LinkList)malloc(sizeof(Node));fflush(stdin);printf("\t\t\t请输入书籍书号:");scanf("%s", &s->num);fflush(stdin);s->bookflag = atoi(s->num) % MAXSIZE;pre = L;while (pre->next != NULL && strcmp(pre->num, s->num)){pre = pre->next;}if (!strcmp(pre->num, s->num)){printf("\t\t\t已存在此书,请直接输入数量:");scanf("%d", &s->now);fflush(stdin);pre->now += s->now;pre->all = pre->now;printf("是否继续录入书籍,若继续录入书籍请回车,否则输入任意字符回车:");if (getchar() != '\n'){fflush(stdin);flag = 0;}else{flag = 1;}continue;}printf("\t\t\t请输入书籍书名:");scanf("%s", &s->name);fflush(stdin);printf("\t\t\t请输入书籍作者:");scanf("%s", &s->author);fflush(stdin);printf("\t\t\t请输入数量:");scanf("%d", &s->now);fflush(stdin);printf("是否继续录入书籍,若继续录入书籍请回车,否则输入任意字符回车:");s->all = s->now;s->next = L->next;L->next = s;if (getchar() != '\n'){fflush(stdin);flag = 0;}}system("cls");return 1;
}
void switchl(LinkList &M, int r3) //选择借阅书籍方式
{system("cls");int flag = 0;do{printf("\n\t\t\t\t\t\t借阅方式\n""\t\t\t\t\t\t 1.书号\n""\t\t\t\t\t\t 2.书名\n");int x, i;char b[MAXSIZE];printf("\t\t\t请选择借阅方式:");scanf("%d", &x);fflush(stdin);switch (x){case 1:printf("\t\t\t请输入借阅书籍书号:");gets(b);fflush(stdin);printf("\t\t\t请输入借阅数量:");scanf("%d", &i);fflush(stdin);lend(M, b, i, r3);flag = 0;break;case 2:printf("\t\t\t请输入借阅书籍书名:");gets(b);fflush(stdin);printf("\t\t\t请输入借阅数量:");scanf("%d", &i);fflush(stdin);lend1(M, b, i, r3);flag = 0;break;default:system("cls");color(4);printf("\t\t\t\t\t\t不存在此操作,请重新选择!!!\n\n");color(16);flag = 1;printf("\t\t\t\t按任意键继续...");getchar();fflush(stdin);system("cls");break;}} while (flag);
}
int lend(LinkList &L, char nu[MAXSIZE], int i, int r4) //通过书号借阅书籍
{time_t timep;struct tm *p;time(&timep);timep = time(NULL) + 31 * 24 * 60 * 60;p = gmtime(&timep);LinkList pre;int k;pre = L;k = 0;while (pre->next != NULL && strcmp(pre->num, nu)){pre = pre->next;}if (strcmp(pre->num, nu)){color(4);printf("\t\t\t不存在此书!\n\n");color(16);printf("\t\t\t\t按任意键继续...");getchar();fflush(stdin);system("cls");return 0;}if (pre->now == 0){system("cls");printf("\t\t\t书号\t书名\t作者\t剩余量\t库存量\n");printf("\t\t\t%s\t%s\t%s\t%d\t%d\n", pre->num, pre->name, pre->author, pre->now, pre->all);color(4);printf("\t\t\t\t此书已被借完!\n\n");color(16);printf("\t\t\t\t按任意键继续...");getchar();fflush(stdin);system("cls");return 0;}if (pre->now < i){system("cls");printf("\t\t\t书号\t书名\t作者\t剩余量\t库存量\n");printf("%s\t%s\t%s\t%d\t%d\n", pre->num, pre->name, pre->author, pre->now, pre->all);color(4);printf("\t\t\t此书库存不足%d本!\n\n", i);color(16);printf("\t\t\t\t按任意键继续...");getchar();fflush(stdin);system("cls");return 0;}inf[r4].bookn = pre->bookflag;if (inf[r4].booknu[inf[r4].bookn] + i > 2){printf("你以前关于本书的借阅信息如下\n");printf("\t\t\t书号\t书名\t作者\t借阅量\n");printf("\t\t\t%s\t%s\t%s\t", pre->num, pre->name, pre->author);color(4);printf("%d\t", inf[r4].booknu[inf[r4].bookn]);color(16);color(4);printf("\t\t\t一本书最多只能借2本!!\n");color(16);printf("\t\t\t\t按任意键继续...");getchar();fflush(stdin);system("cls");return 0;}pre->now -= i;system("cls");printf("\t\t\t借阅的书籍信息如下:\n");printf("\t\t\t书号\t书名\t作者\t借阅数量\t剩余量\t归还时间\n");printf("\t\t\t %s\t %s\t %s\t  %d\t\t%d\t%d年%d月%d日\n", pre->num, pre->name, pre->author, i, pre->now, 1900 + p->tm_year, 1 + p->tm_mon, p->tm_mday);printf("\t\t\t成功借出此书!\n\n");inf[r4].bookn = pre->bookflag;inf[r4].y[inf[r4].bookn] = 1900 + p->tm_year;inf[r4].m[inf[r4].bookn] = 1 + p->tm_mon;inf[r4].d[inf[r4].bookn] = p->tm_mday;strcpy(inf[r4].booknum[inf[r4].bookn], pre->num);inf[r4].booknu[inf[r4].bookn] += i;printf("\t\t\t\t按任意键继续...");getchar();fflush(stdin);system("cls");return 1;
}
int lend1(LinkList &L, char nam[MAXSIZE], int i, int r4) //通过书名借出书籍
{time_t timep;struct tm *p;time(&timep);timep = time(NULL) + 31 * 24 * 60 * 60;p = gmtime(&timep);LinkList pre;int k;pre = L;k = 0;while (pre->next != NULL && strcmp(pre->name, nam)){pre = pre->next;}if (strcmp(pre->num, nam)){color(4);printf("\t\t\t不存在此书!\n\n");color(16);printf("\t\t\t\t按任意键继续...");getchar();fflush(stdin);system("cls");return 0;}if (pre->now == 0){printf("\t\t\t书号\t书名\t作者\t剩余量\t库存量\n");printf("\t\t\t%s\t%s\t%s\t%d\t%d\n", pre->num, pre->name, pre->author, pre->now, pre->all);color(4);printf("\t\t\t此书已被借完!\n\n");color(16);printf("\t\t\t\t按任意键继续...");getchar();fflush(stdin);system("cls");return 0;}if (pre->now < i){printf("\t\t\t书号\t书名\t作者\t剩余量\t库存量\n");printf("\t\t\t%s\t%s\t%s\t%d\t%d\n", pre->num, pre->name, pre->author, pre->now, pre->all);color(4);printf("\t\t\t此书库存不足%d本!\n\n", i);color(16);printf("\t\t\t\t按任意键继续...");getchar();fflush(stdin);system("cls");return 0;}inf[r4].bookn = pre->bookflag;if (inf[r4].booknu[inf[r4].bookn] + i > 2){printf("你以前关于本书的借阅信息如下\n");printf("\t\t\t书号\t书名\t作者\t借阅量\n");printf("\t\t\t%s\t%s\t%s\t", pre->num, pre->name, pre->author);color(4);printf("%d\t", inf[r4].booknu[inf[r4].bookn]);color(16);color(4);printf("\t\t\t一本书最多只能借2本!!\n");color(16);printf("\t\t\t\t按任意键继续...");getchar();fflush(stdin);system("cls");return 0;}pre->now -= i;system("cls");printf("\t\t\t借阅的书籍信息如下:\n");printf("\t\t\t书号\t书名\t作者\t借阅数量\t剩余量\t归还时间\n");printf("\t\t\t %s\t %s\t %s\t  %d\t\t%d\t%d年%d月%d日\n", pre->num, pre->name, pre->author, i, pre->now, 1900 + p->tm_year, 1 + p->tm_mon, p->tm_mday);printf("\t\t\t成功借出此书!\n\n");inf[r4].bookn = pre->bookflag;inf[r4].y[inf[r4].bookn] = 1900 + p->tm_year;inf[r4].m[inf[r4].bookn] = 1 + p->tm_mon;inf[r4].d[inf[r4].bookn] = p->tm_mday;strcpy(inf[r4].booknum[inf[r4].bookn], pre->num);inf[r4].booknu[inf[r4].bookn] += i;printf("\t\t\t\t按任意键继续...");getchar();fflush(stdin);system("cls");return 1;
}
void switchr(LinkList &M, int r3) //选择归还书籍方式
{int flag = 0;system("cls");do{printf("\n\t\t\t\t\t\t还书方式\n""\t\t\t\t\t\t 1.书号\n""\t\t\t\t\t\t 2.书名\n");int x, i;char b[MAXSIZE];printf("\t\t\t请选择还书方式:");scanf("%d", &x);fflush(stdin);switch (x){case 1:printf("\t\t\t请输入归还书籍书号:");gets(b);fflush(stdin);printf("\t\t\t请输入归还数量:");scanf("%d", &i);fflush(stdin);returnb(M, b, i, r3);flag = 0;break;case 2:printf("\t\t\t请输入归还书籍书名:");gets(b);fflush(stdin);printf("\t\t\t请输入归还数量:");scanf("%d", &i);fflush(stdin);returnb1(M, b, i, r3);flag = 0;break;default:system("cls");color(4);printf("\t\t\t\t\t\t不存在此操作,请重新选择!!!\n\n");color(16);flag = 1;printf("\t\t\t\t按任意键继续...");getchar();fflush(stdin);system("cls");break;}} while (flag);
}int returnb(LinkList &L, char nu[MAXSIZE], int i, int r4) //通过书号归还书籍
{LinkList pre;int k;pre = L;k = 0;while (pre->next != NULL && strcmp(pre->num, nu)){pre = pre->next;}if (strcmp(pre->num, nu)){color(4);printf("\t\t\t不存在此书!\n\n");color(16);printf("\t\t\t\t按任意键继续...");getchar();fflush(stdin);system("cls");return 0;}inf[r4].bookn = pre->bookflag;if (inf[r4].booknu[inf[r4].bookn] < i){printf("\t\t\t书号\t书名\t作者\t借阅量\t库存量\n");printf("\t\t\t%s\t%s\t%s\t", pre->num, pre->name, pre->author);color(4);printf("%d\t", inf[r4].booknu[inf[r4].bookn]);color(16);printf("%d\n", pre->all);color(4);printf("\t\t\t归还的数量超出应有的借阅量,请检查是否确认无误!\n\n");color(16);printf("\t\t\t\t按任意键继续...");getchar();fflush(stdin);system("cls");return 0;}pre->now += i;system("cls");printf("\t\t\t归还的书籍信息如下:\n");printf("\t\t\t书号\t书名\t作者\t归还数量\t剩余量\n");printf("\t\t\t %s\t %s\t %s\t  %d\t\t%d\n", pre->num, pre->name, pre->author, i, pre->now);printf("\t\t\t成功归还此书!\n\n");inf[r4].bookn = pre->bookflag;strcpy(inf[r4].booknum[inf[r4].bookn], "");inf[r4].booknu[inf[r4].bookn] -= i;printf("\t\t\t\t按任意键继续...");getchar();fflush(stdin);system("cls");return 1;
}
int returnb1(LinkList &L, char nam[MAXSIZE], int i, int r4) //通过书名归还书籍
{LinkList pre;int k;pre = L;k = 0;while (pre->next != NULL && strcmp(pre->name, nam)){pre = pre->next;}if (strcmp(pre->num, nam)){color(4);printf("\t\t\t不存在此书!\n\n");color(16);printf("\t\t\t\t按任意键继续...");getchar();fflush(stdin);system("cls");return 0;}if (inf[r4].booknu[inf[r4].bookn] < i){printf("\t\t\t书号\t书名\t作者\t借阅量\t库存量\n");printf("\t\t\t%s\t%s\t%s\t", pre->num, pre->name, pre->author);color(4);printf("%d\t", inf[r4].booknu[inf[r4].bookn]);color(16);printf("%d\n", pre->all);color(4);printf("\t\t\t归还的数量超出应有的借阅量,请检查是否确认无误!\n\n");color(16);printf("\t\t\t\t按任意键继续...");getchar();fflush(stdin);system("cls");return 0;}pre->now += i;system("cls");printf("\t\t\t归还的书籍信息如下:\n");printf("\t\t\t书号\t书名\t作者\t归还数量\t剩余量\n");printf("\t\t\t%s\t%s\t%s\t%d\t%d\n", pre->num, pre->name, pre->author, i, pre->now);printf("\t\t\t成功归还此书!\n\n");inf[r4].bookn = pre->bookflag;strcpy(inf[r4].booknum[inf[r4].bookn], "");inf[r4].booknu[inf[r4].bookn] -= i;printf("\t\t\t\t按任意键继续...");getchar();fflush(stdin);system("cls");return 1;
}
int show(LinkList &L) //显示图书馆中所有书籍
{system("cls");LinkList pre;int k = 0, j = 0;pre = L;while (pre->next != NULL){pre = pre->next;if (j == 0 && pre->next != NULL){printf("\n\t\t\t\t\t现有的的书籍信息如下:\n");printf("\t\t\t\t\t书号\t\t书名\t\t    作者\t剩余量\t库存量\n");j++;}if (pre->next)printf("%43s%17s%20s%10d%10d\n", pre->num, pre->name, pre->author, pre->now, pre->all);k++;}if (k == 1){color(4);printf("\t\t\t\t\t图书馆里没有书,请采编书籍入库\n");color(16);printf("\t\t\t\t按任意键继续...");getchar();fflush(stdin);system("cls");return 0;}printf("\n");printf("\t\t\t\t按任意键继续...");getchar();fflush(stdin);system("cls");return 1;
}
int own(LinkList &L, int r3) //查看自己借的书籍以及归还时间
{system("cls");LinkList pre;int k, l = 0, j = 0;pre = L;k = 0;pre = pre->next;while (pre != NULL){inf[r3].bookn = pre->bookflag;while (pre->next != NULL && strcmp(pre->num, inf[r3].booknum[inf[r3].bookn])){pre = pre->next;inf[r3].bookn = pre->bookflag;}if (!strcmp(pre->num, inf[r3].booknum[inf[r3].bookn]) && l == 0){printf("\n你借阅的书籍信息如下\n");printf("\t\t\t序号\t书号\t\t书名\t\t作者\t借阅数量\t图书馆剩余量\t归还日期\n\n");l++;}if (!strcmp(pre->num, inf[r3].booknum[inf[r3].bookn])){++k;printf("%27d%9s%16s%16s%9d%19d\t%d年%d月%d日\n", k, pre->num, pre->name, pre->author, inf[r3].booknu[inf[r3].bookn], pre->now, inf[r3].y[inf[r3].bookn], inf[r3].m[inf[r3].bookn], inf[r3].d[inf[r3].bookn]);j++;}if (j == 0){color(4);printf("\n\t\t\t\t\t\t你还没有借书!\n\n");color(16);printf("\t\t\t\t按任意键继续...");getchar();fflush(stdin);system("cls");return 0;}pre = pre->next;}printf("\n");printf("\t\t\t\t按任意键继续...");getchar();fflush(stdin);system("cls");return 1;
}
int bookdataw(LinkList &L) //存储图书馆中所有书籍数据,数据存储在当前目录下bookdata.csv,可用excel编辑
{LinkList pre;int flag3 = 0;pre = L;remove("bookdata.csv");FILE *fp;fp = fopen("bookdata.csv", "w");while (pre->next->next != NULL){if (flag3 != 0){fprintf(fp, "\n");}elsefprintf(fp, "书标记号,书号,书名,作者,现存量,总量\n");pre = pre->next;fprintf(fp, "%d,%s,%s,%s,%d,%d", pre->bookflag, pre->num, pre->name, pre->author, pre->now, pre->all);flag3++;}fclose(fp);return 1;
}
int bookdatar(LinkList &L) //读取存储图书馆中所有书籍的数据
{int i = 0;LinkList s, pre;pre = L;init(L);FILE *fp;char data[1024] = {};char *line, *record, *title;fp = fopen("bookdata.csv", "r");if (fp == NULL){return 0;}rewind(fp);while (!feof(fp)){if (i == 0){title = fgets(data, 1024, fp);i++;}else{s = (LinkList)malloc(sizeof(Node));line = fgets(data, 1024, fp);if (line != NULL){record = strtok(data, ",");s->bookflag = atoi(record);record = strtok(NULL, ",");strcpy(s->num, record);record = strtok(NULL, ",");strcpy(s->name, record);record = strtok(NULL, ",");strcpy(s->author, record);record = strtok(NULL, ",");s->now = atoi(record);record = strtok(NULL, ",");s->all = atoi(record);s->next = L->next;L->next = s;}}}fclose(fp);return 1;
}
int userdataw(LinkList &L, int r3) //存储用户借阅书籍数据,数据存储在当前目录下user.csv,可用excel编辑
{LinkList pre;pre = L;int flag3 = 0;FILE *fp;char fileName[MAXSIZE];char str[MAXSIZE];itoa(r3, str, 10);strcpy(fileName, "user");strcat(fileName, str);strcat(fileName, ".csv");remove(fileName);fp = fopen(fileName, "w");pre = pre->next;while (pre != NULL){inf[r3].bookn = pre->bookflag;while (pre->next != NULL && strcmp(pre->num, inf[r3].booknum[inf[r3].bookn])){pre = pre->next;inf[r3].bookn = pre->bookflag;}if (!strcmp(pre->num, inf[r3].booknum[inf[r3].bookn])){if (flag3 != 0){fprintf(fp, "\n");}elsefprintf(fp, "书标记号,书号,数量,归还年,归还月,归还日\n");fprintf(fp, "%d,%s,%d,%d,%d,%d", inf[r3].bookn, inf[r3].booknum[inf[r3].bookn], inf[r3].booknu[inf[r3].bookn], inf[r3].y[inf[r3].bookn], inf[r3].m[inf[r3].bookn], inf[r3].d[inf[r3].bookn]);flag3++;}pre = pre->next;}fclose(fp);return 1;
}
int userdatar(int r3) //读取用户借阅所有书籍数据
{FILE *fp;char fileName[MAXSIZE];char str[MAXSIZE];itoa(r3, str, 10);strcpy(fileName, "user");strcat(fileName, str);strcat(fileName, ".csv");fp = fopen(fileName, "r");char data[1024] = {};char *line, *record, *title;int i = 0;if (fp == NULL){return 0;}while (!feof(fp)){if (i == 0){title = fgets(data, 1024, fp);i++;}else{line = fgets(data, 1024, fp);if (line != NULL){record = strtok(data, ",");inf[r3].bookn = atoi(record);record = strtok(NULL, ",");strcpy(inf[r3].booknum[inf[r3].bookn], record);record = strtok(NULL, ",");inf[r3].booknu[inf[r3].bookn] = atoi(record);record = strtok(NULL, ",");inf[r3].y[inf[r3].bookn] = atoi(record);record = strtok(NULL, ",");inf[r3].m[inf[r3].bookn] = atoi(record);record = strtok(NULL, ",");inf[r3].d[inf[r3].bookn] = atoi(record);}}}fclose(fp);return 1;
}
void color(short x) //改变字体颜色
{if (x >= 0 && x <= 15)SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), x);elseSetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);
}
void getpwd(char *pwd, int pwdlen) //密码转星号
{char ch = 0;int i = 0;while (i < pwdlen){ch = getch();if (ch == '\r'){printf("\n");break;}if (ch == '\b' && i > 0){i--;printf("\b \b");}else if (isprint(ch)){pwd[i] = ch;printf("*");i++;}}pwd[i] = 0;
}

c语言课程设计图书管理系统相关推荐

  1. C语言课程设计-图书管理系统

    实训项目名称:图书管理系统的设计与实现 1.实训目的 开发一个小型的图书管理应用软件,使用该软件可以实现图书信息的登记.浏览.借书.还书.删除和更新等操作.通过该系统的实现可以了解C++连接数据库的原 ...

  2. C语言课程设计—图书管理系统

    这是本人大一第二学期初C语言课程设计的作品,嘿嘿,本来以为已经找不到原稿了,今天无意中居然在QQ网络硬盘中找到了当初的teta版,公布于此,以作纪念. C源码例如以下: #include<std ...

  3. 图书管理系统C语言程序设计课程,vs c语言图书管理平台课程设计_图书管理平台c语言程序设计_c语言课程设计 图书管理系统...

    #include #include #include #include //#include #define MAX 100 struct Student { int num;/*书代号*/ char ...

  4. c语言课程设计图书管理系统报告,C语言图书管理系统课程设计报告[1]

    C语言图书管理系统课程设计报告[1] 第三章 图书管理系统的设计与实现3.1 系统的需求分析图书登记管理系统作为一个应用软件将为学校的老师和学生提供一个对学校图书馆深入了解并借阅.还书的平台.根据系统 ...

  5. c语言课程设计作业图书管理系统,C语言课程设计图书馆管理系统程序代码.doc

    C语言课程设计图书馆管理系统程序代码.doc includestdio.h includewindows.h includestring.h includeconio.h define M 100 s ...

  6. c语言大作业书店图书管理系统,c语言课程设计 书店管理系统.pdf

    c语言课程设计 书店管理系统 计算机程序设计(C语言) 课程设计报告 题目:图书管理系统 学院: 专业: 班级: 学号: 姓名: 指导教师: 设计日期:2013年06月24 日 一.选题背景: 设计一 ...

  7. c语言程序设计书店销售管理系统,C语言课程设计-书店管理系统

    <C语言课程设计-书店管理系统>由会员分享,可在线阅读,更多相关<C语言课程设计-书店管理系统(25页珍藏版)>请在人人文库网上搜索. 1.计算机程序设计计算机程序设计(C(C ...

  8. c语言编程票务系统,C语言课程设计票务管理系统

    C语言课程设计票务管理系统 C语言课程设计1西安交通大学城市学院C语言程序设计课程设计报告题目图书信息管理系统专业自动化班级自动化101姓名陈蕾完成日期2012年5月31日C语言课程设计2目录第一章项 ...

  9. C#课程设计-图书管理系统

    C#课程设计-图书管理系统 前言 一.课设任务是什么? 二.使用工具及软件环境 三.系统功能介绍及部分代码展示 3.1 登陆界面及主要代码 3.2 图书管理 3.3 修改书籍页面视图及主要代码 四.使 ...

最新文章

  1. httpd.2.4虚拟主机配置测试
  2. aspose.cells 无法读取公式值_隐藏 Excel表格、公式的9种方法
  3. java 初始化顺序_Java中对象初始化顺序的详细介绍
  4. tensorflow 线性回归
  5. ThreadPoolExecutor使用详解
  6. 深入浅出SharePoint——数据库维护
  7. unity3d 数学的数学基础和辅助类
  8. Android数据适配-ExpandableListView
  9. c#: 任务栏进度显示(TaskbarManager)
  10. 【转载保存】网页提取正文算法汇总
  11. python软件-Python软件下载|Python最新版本v3.5.1 下载_当游网
  12. Spring Cache 介绍
  13. 大数据的发展体现在哪些方面
  14. Mycat 分布式事务的实现
  15. tableau学生版注册流程
  16. FlyMcu - 用于STM32芯片ISP串口程序一键下载的免费软件
  17. 联想服务器控制口登录地址_常用设备管理口默认用户名密码汇总
  18. android addr2line使用
  19. 阿里数据研发工程师实习生面试经历
  20. python爬取qq音乐下载歌曲

热门文章

  1. Java8新特性之Lambda,呦呦呦
  2. 链表结点的物理顺序与逻辑顺序
  3. RNA-seq连特异性
  4. 考驾照自我总结(待更新修正)
  5. oracle一列多行转一行多列表示,Oracle 多行转多列,列值转为列名
  6. Apache Kafka API AdminClient Scram账户的操作(增删改查)
  7. 外部访问docker容器(docker run -p/-P 指令)
  8. win10+vs2017配置mpi环境的记录(已成功)
  9. GPT 分区如何调整为 MBR 分区
  10. 微信公众平台定制开发