大一新生,刚接触c语言不久,只想分享一下自己的小成果(第一次做)嘿嘿!
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#define N sizeof(book)
typedef struct BOOK//book结构体
{
char name[100];
long num;
char writer[100];
float price;
int stock;
struct BOOK *next;
} book;
struct TEACHER
{
char id[17];
char key[17];
} teacher[10];
struct STUDENT
{
char id[17];
char key[17];
} student[10];
void menu();//菜单
void menu1();//学生登录菜单
void menu2();//管理员登录菜单
void writeninfile1(book *head);//写入图书添加到文件末尾
void writeninfile2(book *head);//写入图书并取代原文件的内容
void print(book *head);//对结构体的读取
void findbook();//查找图书
void del();//删除函数
void modifybook();//修改图书信息
void putbook();//新书录入函数
void Lendbook();//借出函数
void returnbook();//归还函数
void creataccount();//创建账号菜单
void putaccount1();
void putaccount2();
int Verification1(char n[],char m[]);
int Verification2(char n[],char m[]);
book *readfile();//从文件中读取书本信息并返回头指针
int main()
{
menu();
return 0;
}
void menu()//菜单
{
char c;
do
{
system("color B4");
printf("\n\n\n\n");
printf(" *****************************************\n");
printf(" * 图书管理系统 *\n");
printf(" * 1.学生 *\n");
printf(" * 2.管理员 *\n");
printf(" * 3.创建账号 *\n");
printf(" * 4.退出系统 *\n");
printf(" *****************************************\n");
printf(" _________________________________________\n\n\n");
printf("请选择你的操作");
printf("(1/2/3):\n");
c = getch();
system("cls");
switch(c)
{
case '1':
menu1();
break;
case '2':
menu2();
break;
case '3':
creataccount();
break;
case '4':
exit(0);
break;
default :
printf("选择错误!请重新选择:\n");
break;
}
}
while(1);
}
void menu2()//管理员登录菜单
{
char teacherID[17],teacherKEY[17];
char c;
do
{
printf("请输入用户名:\n");
gets(teacherID);
printf("请输入密码:\n");
gets(teacherKEY);
system("cls");
if(Verification1(teacherID,teacherKEY))
{
do
{
system("color ED");
printf(" ************************\n");
printf(" * 1.新书录入 *\n");
printf(" * 2.删除图书 *\n");
printf(" * 3.图书查找 *\n");
printf(" * 4.图书信息修改 *\n");
printf(" * 5.查看所有书籍 *\n");
printf(" * 6.返回上一界面 *\n");
printf(" ************************\n\n\n");
printf("请选择你的操作:\n");
scanf("%c",&c);
while(getchar()!='\n');
system("cls");
switch(c)
{
case '1':
putbook();
while(getchar()!='\n');
break;
case '2':
del();
while(getchar()!='\n');
break;
case '3':
findbook();
while(getchar()!='\n');
break;
case '4':
modifybook();
while(getchar()!='\n');
break;
case '5':
print(readfile());
break;
case '6':
menu();
break;
default :
printf("输入错误,请重新选择!\n");
}
}
while(1);
}
else
{
printf("用户名或密码错误!\n");
printf("1.返回上一界面\n");
printf("2.输入任意键重新输入账号密码\n");
scanf("%c",&c);
while(getchar()!='\n');
system("cls");
switch(c)
{
case '1':
menu();
break;
default :
printf("重新输入:\n");
}
}
}
while(1);
}
void menu1()//学生登录菜单
{
char studentID[100],studentKEY[100];
char c;
do
{
printf("请输入用户名:\n");
gets(studentID);
printf("请输入密码:\n");
gets(studentKEY);
system("cls");
if(Verification2(studentID,studentKEY))
{
do
{
system("color 7F");
printf(" ***********************\n");
printf(" * 1.图书借出 *\n");
printf(" * 2.图书归还 *\n");
printf(" * 3.图书查找 *\n");
printf(" * 4.查看所有书籍 *\n");
printf(" * 5.返回上一界面 *\n");
printf(" ***********************\n\n\n");
printf("请选择你的操作:\n");
scanf("%c",&c);
while(getchar()!='\n');
system("cls");
switch(c)
{
case '1':
Lendbook();
while(getchar()!='\n');
break;
case '2':
returnbook();
while(getchar()!='\n');
break;
case '3':
findbook();
while(getchar()!='\n');
break;
case '4':
print(readfile());
break;
case '5':
menu();
break;
default :
printf("输入错误,请重新选择!\n");
break;
}
}
while(1);
}
else
{
printf("用户名或密码错误!\n");
printf("1.返回上一界面\n");
printf("2.输入任意键重新输入账号密码\n");
scanf("%c",&c);
while(getchar()!='\n');
system("cls");
switch(c)
{
case '1':
menu();
break;
default:
printf("重新输入:\n");
}
}
}
while(1);
}
void putbook()
{
FILE *fp;
char name[100];
book *head,*p,*pr;
if((fp=fopen("book.txt","r"))==NULL)
{
head = NULL;
}
else
{
head = readfile();
}
p=pr=head;
printf("请输入书名\n");
scanf("%s",name);
if(head == NULL)
{
head = (book *)malloc(N);
strcpy(head->name,name);
printf("请输入编号\n");
scanf("%ld",&head->num);
printf("请输入作者\n");
scanf("%s",head->writer);
printf("请输入价格\n");
scanf("%f",&head->price);
head->stock=1;
head->next=NULL;
system("cls");
printf("添加成功!\n");
writeninfile2(head);
}
else
{
while(strcmp(name,p->name)!=0&&p->next!=NULL)
{
p=p->next;
}
if(strcmp(name,p->name)==0)
{
printf("改书已经存在了!储量+1!\n");
p->stock=p->stock+1;
}
else
{
pr=(book *)malloc(N);
p->next=pr;
strcpy(pr->name,name);
printf("请输入编号\n");
scanf("%ld",&pr->num);
printf("请输入作者\n");
scanf("%s",pr->writer);
printf("请输入价格\n");
scanf("%f",&pr->price);
pr->stock=1;
pr->next=NULL;
system("cls");
printf("添加成功!\n");
}
writeninfile2(head);
}
}
void writeninfile1(book *head)//写入图书添加到文件末尾
{
FILE *fp;
book *p;
p=head;
if((fp=fopen("book.txt","a"))==NULL)
{
printf("没有图书!请进入管理员界面添加!\n");
menu();
}
while(p!=NULL)
{
fprintf(fp,"%s %ld %s %.2f %d ",p->name,p->num,p->writer,p->price,p->stock);
p=p->next;
}
fclose(fp);
}
void writeninfile2(book *head)//写入图书并取代原文件的内容
{
FILE *fp;
book *p;
p=head;
if((fp=fopen("book.txt","w"))==NULL)
{
printf("没有图书!请进入管理员界面添加!\n");
menu();
}
while(p!=NULL)
{
fprintf(fp,"%s %ld %s %.2f %d ",p->name,p->num,p->writer,p->price,p->stock);
p=p->next;
}
fclose(fp);
}
book *readfile()//读文件中的数据并返回头文件
{
FILE *fp;
book *head=NULL,*p,*pr;
if((fp=fopen("book.txt","r"))==NULL)
{
printf("没有图书!请进入管理员界面添加!\n");
menu();
}
while(!feof(fp))
{
p=(book *)malloc(N);
fscanf(fp,"%s %ld %s %f %d ",p->name,&p->num,p->writer,&p->price,&p->stock);
if(head==NULL)
head=p;
else
pr->next=p;
p->next=NULL;
pr=p;
}
fclose(fp);
return head;
}
void print(book *head)//链表的读取
{
book *p;
p=head;
if(head!=NULL)
{
do
{
printf("书名:%20s\t书号:%3ld\t作者:%20s\t价格:%7.2f\t库存:%d\n",p->name,p->num,p->writer,p->price,p->stock);
p=p->next;
}
while(p);
}
}
void findbook()
{
char name[100];
book *p;
p=readfile();
printf("请输入你要查找的书名:\n");
scanf("%s",name);
if(p==NULL)
{
printf("没有图书!请进入管理员界面添加!\n");
menu();
}
else
{
while(p)
{
if(strcmp(p->name,name)==0)
{
printf("找到了!\n");
printf("书名:%20s\t书号:%3ld\t作者:%20s\t价格:%7.2f\t库存:%d\n",p->name,p->num,p->writer,p->price,p->stock);
break;
}
if(p->next==NULL)
printf("没有该书本信息!\n");
p=p->next;
}
}
}
void del()
{
char name[100];
book *head,*p,*pr;
head = readfile();
p=pr=head;
printf("请输入你要删除书的书名:\n");
scanf("%s",name);
if(head==NULL)
{
printf("没有书籍!返回主菜单!");
menu();
}
while(strcmp(p->name,name)!=0&&p->next!=NULL)
{
pr=p;
p=p->next;
}
if(strcmp(p->name,name)==0)
{
printf("书名:%20s\t书号:%3ld\t作者:%20s\t价格:%7.2f\t库存:%d\n",p->name,p->num,p->writer,p->price,p->stock);
if(p==head)
{
head=p->next;
}
else
{
pr->next=p->next;
}
printf("删除成功!\n");
free(p);
}
else
{
printf("没有这本书的信息!\n");
}
writeninfile2(head);
}
void modifybook()
{
char name[100];
book *head,*p,*pr;
head = readfile();
p=pr=head;
printf("请输入你要修改书的书名:\n");
scanf("%s",name);
if(head==NULL)
{
printf("没有书籍!返回主菜单!");
menu();
}
while(strcmp(p->name,name)!=0&&p->next!=NULL)
{
pr=p;
p=p->next;
}
if(strcmp(p->name,name)==0)
{
printf("找到了!\n");
printf("书名:%20s\t书号:%3ld\t作者:%20s\t价格:%7.2f\t库存:%d\n",p->name,p->num,p->writer,p->price,p->stock);
printf("请输入修改的书名\n");
scanf("%s",p->name);
printf("请输入修改的编号\n");
scanf("%ld",&p->num);
printf("请输入修改的作者\n");
scanf("%s",p->writer);
printf("请输入修改的价格\n");
scanf("%f",&p->price);
printf("请输入修改储量\n");
scanf("%d",&p->stock);
printf("修改成功!\n");
}
else
{
printf("没有这本书的信息!\n");
}
writeninfile2(head);
}
void Lendbook()
{
char name[100];
book *head,*p,*pr;
head = readfile();
p=pr=head;
printf("请输入你要借出书的书名:\n");
scanf("%s",name);
if(head==NULL)
{
printf("没有书籍!返回主菜单!");
menu();
}
while(strcmp(p->name,name)!=0&&p->next!=NULL)
{
pr=p;
p=p->next;
}
if(strcmp(p->name,name)==0)
{
printf("该书的信息为:\n");
printf("书名:%20s\t书号:%3ld\t作者:%20s\t价格:%7.2f\t库存:%d\n",p->name,p->num,p->writer,p->price,p->stock);
if(p->stock>0)
{
printf("借出成功!\n");
p->stock--;
}
else
{
printf("该书已经被借完了!\n");
}
}
else
{
printf("没有这本书的信息!请联系管理员添加!\n");
}
writeninfile2(head);
}
void returnbook()
{
char name[100];
book *head,*p,*pr;
head = readfile();
p=pr=head;
printf("请输入你要归还书的书名:\n");
scanf("%s",name);
if(head==NULL)
{
printf("没有书籍!返回主菜单!");
menu();
}
while(strcmp(p->name,name)!=0&&p->next!=NULL)
{
pr=p;
p=p->next;
}
if(strcmp(p->name,name)==0)
{
printf("该书的信息为:\n");
printf("书名:%20s\t书号:%3ld\t作者:%20s\t价格:%7.2f\t库存:%d\n",p->name,p->num,p->writer,p->price,p->stock);
p->stock++;
printf("归还成功!\n");
}
else
{
printf("没有这本书的信息!请联系管理员归还该书!\n");
}
writeninfile2(head);
}
void creataccount()
{
char c;
do
{
printf(" *************************\n");
printf(" * 1.注册管理员账号 *\n");
printf(" * 2.注册学生账号 *\n");
printf(" * 3.返回上一界面 *\n");
printf(" *************************\n\n\n");
printf("请输入你的选择:\n");
printf(" (1/2/3) \n");
scanf("%c",&c);
while(getchar()!='\n');
system("cls");
switch(c)
{
case '1':
putaccount1();
while(getchar()!='\n');
break;
case '2':
putaccount2();
while(getchar()!='\n');
break;
case '3':
menu();
break;
}
}
while(1);
}
void putaccount1()
{
char a[17],b[17];
FILE *fp;
printf("请输入注册账号:\n");
scanf("%s",a);
printf("请输入注册密码:\n");
scanf("%s",b);
if((fp=fopen("teacher.txt","a"))==NULL)
{
printf("系统内存不够请释放内存!");
menu();
}
else
{
fprintf(fp,"%s %s ",a,b);
}
fclose(fp);
}
void putaccount2()
{
char a[17],b[17];
FILE *fp;
printf("请输入注册账号:\n");
scanf("%s",a);
printf("请输入注册密码:\n");
scanf("%s",b);
if((fp=fopen("student.txt","a"))==NULL)
{
printf("系统内存不够请释放内存!");
menu();
}
else
{
fprintf(fp,"%s %s ",a,b);
}
fclose(fp);
}
int Verification1(char n[],char m[])
{
char a[10][17],b[10][17];
int i,t=0;
FILE *fp;
if((fp=fopen("teacher.txt","r"))==NULL)
{
printf("打开文件失败!");
menu();
}
else
{
for(i=0;!feof(fp);i++)
{
fscanf(fp,"%s %s ",a[i],b[i]);
if(strcmp(a[i],n)==0&&strcmp(b[i],m)==0)
t=1;
}
}
fclose(fp);
return t;
}
int Verification2(char n[],char m[])
{
char a[10][17],b[10][17];
int i,t=0;
FILE *fp;
if((fp=fopen("student.txt","r"))==NULL)
{
printf("打开文件失败!");
menu();
}
else
{
for(i=0;!feof(fp);i++)
{
fscanf(fp,"%s %s ",a[i],b[i]);
if(strcmp(a[i],n)==0&&strcmp(b[i],m)==0)
t=1;
}
}
fclose(fp);
return t;
}
我不专业!正在学习中。。。