C语言大作业之图书管理系统的实现详程

目录
  • 主要内容
  • 概要设计
  • 项目源码
    • 结构体
    • 登录界面函数
    • 选择界面函数
    • 操作界面函数
    • 添加函数
    • 查找函数
    • 删除函数
    • 借书管理函数
    • 信息储存函数
    • 还书函数
    • 修改函数
    • 添加借书函数
    • 查找借书函数
    • 借书管理函数
    • 主函数
  • 总结

时间在流去,我们在长大。

嗨,这里是狐狸~~

今天是2022年的一月四日了,元旦小长假也过去了,新年新气象,新年新目标,我们要向前看,不要执意过去了,感谢过去,把握现在,展望未来,这是我们现在应该做的。好了,废话不多说,今天我们分享一个系统,确实也有许久没有分享过系统了,今天就给大家详细讲一下这个图书管理系统吧。

主要内容

开发一个图书信息管理系统,图书信息包括:图书编号、书名、作者、出版社、类别、出版时间、价格等基本信息(也可以根据自己情况进行扩充,比如是否借出、库存量等)。使之能提供以下基本功能:

(1)图书信息录入功能(图书信息用文件保存)--输入

(2)图书信息浏览功能--输出

(3)查询功能(至少一种查询方式)、排序功能(至少一种排序方式):

①按书名查询

②按作者名查询 按照价钱排序 按出版时间排序等等

(4)图书信息的删除与修改

扩展功能:可以按照自己的程度进行扩展。比如

(1)简单的权限处理

(2)报表打印功能

(3)甚至根据自己情况,可以加上学生信息,并扩充为图书借阅系统。

(4)模糊查询

(5)综合查询

(6)统计功能 比如统计处某一类别的图书信息 或 筛选出小于指定数量库存的图书信息等等。

概要设计

1 图书录入可以录入图书名,作者,出版社,出版日期,价格!录入图书编号时函数就会判断此        编 号是否存在,若存在不能成功录入!

2 图书浏览可以浏览全部图书!

3 图书查询提供按图书编号模糊查询,按图书名关键字查询,按图书编号精确查询,按图书名精确      查询!模糊查询和关键字查询事通过比价字符串的相似度而实现的!

4 修改删除图书可以通过图书查询来查询操作的图书编号,通过编号操作!函数会提示用户是否调      用图书查询来找到自己想要操作的图书的编号。如果某一本图书已经被借阅那么用户就不能删        除 该图书!

5 借阅图书通过学号和图书编号进行借阅!如果该学号是第一次借阅那么会提示用户输入自己的姓      名,并存入student.txt,方便以后借阅与归还!

6 归还图书先提供学号,然后程序会输出该学号借阅的所有图书,然后再通过编号归还!

7 借阅查询可查询某个学生已借但未归还的图书!

项目源码

结构体

先建立结构体,定义结构体成员

typedef struct book/*图书结构体*/
{
char num[10];  /*书号*/
char name[10];  /*书名*/
char auth[10]; /*作者*/
int count;
int sum;
}Book;
typedef struct borrow/*借书结构体*/
{
char id[20];
char user[20];
char book[20];
char bookid[20];
struct borrow *next;
}BBnode,*BBlink;
struct user
{
char num[10];/* 学号 */
char pass[15];
char name[15];
char sex[10]; 

}; 

typedef struct unode
{
struct user data;
struct unode *next;
}Unode,*Ulink;
Unode *os;

登录界面函数

int login(Ulink l)
{

/*****************登陆窗口初始化****************************/
while(!flag)
{
char User_id[10],password[10],tmp;
int i=0;
User_id[0]='\0';
password[0]='\0';
textbackground(179);
clrscr();
gotoxy(33,23);
textcolor(YELLOW);
cputs("ESC = EXIT");
textcolor(WHITE);
textbackground(179);
box(1,1,80,24);
h_line(2,3,78);
gotoxy(15,2);
cputs("Login now please input the User__ID  and Password");
bar_(30,10,23,5,5);
/******************账号过滤*********************/
while(User_id[0]=='\0')
{
gotoxy(31,11);
textcolor(YELLOW);
textbackground(5);
cputs("User__ID:");
gotoxy(31,13);
cputs("Password:");
textbackground(179);
textcolor(WHITE);
gotoxy(28,7);
cputs("please input the User__ID!");
textbackground(179);
textcolor(YELLOW);
gotoxy(27,11);
putch(272);
gotoxy(27,13);
putch(' ');
gotoxy(40,11);
tmp=getch();
if(tmp==27)
{
flg=27;
return 0;
}
while(tmp!='\r'&&i<=9&&(tmp>=64&&tmp<=90)||(tmp>=97&&tmp<=122||(tmp>=48&&tmp<=57)))
{
textcolor(YELLOW);
textbackground(5);
	putch(tmp);
	User_id[i]=tmp;
	i++;
	tmp=getch();
	if(tmp==27)
	{
flg=27;
return 0;
}
}
User_id[i]='\0';
}
/**********************密码过滤****************************/
while(password[0]=='\0')
{
gotoxy(28,7);
textbackground(179);
textcolor(WHITE);
cputs("  input the password now  ");
textbackground(179);
textcolor(YELLOW);
gotoxy(27,13);
putch(272);
gotoxy(27,11);
putch(' ');
gotoxy(40,13);
i=0;
tmp=getch();
if(tmp==27)
{
flg=27;
return 0;
}
while(tmp!='\r'&&i<=10&&(tmp>=64&&tmp<=90)||(tmp>=97&&tmp<=122||(tmp>=48&&tmp<=57)))
{
	textbackground(5);
	putch('*');

	password[i]=tmp;
	i++;
	tmp=getch();
	if(tmp==27)
	{
flg=27;
return 0;
}
}
password[i]='\0';
}
/*************把账号和密码进行对比验证**************/
if(!strcmp(User_id,"admin")&&!strcmp(password,"admin"))
	{
		return 2;
	}
if(cmps(l,User_id,password))
{
	return 1;
}
}
}

选择界面函数

void choose()
{
while(1)
{

textbackground(179);
clrscr();
gotoxy(33,2);
textcolor(WHITE);
cputs("Administrastor");
textcolor(YELLOW);
box(1,1,80,24);
h_line(2,3,78);
gotoxy(3,6);
cputs(">>>-------------------------1.User Management----------------------------<<<");
gotoxy(3,10);
cputs(">>>-------------------------2.Book Management----------------------------<<<");
	gotoxy(3,14);
cputs(">>>-------------------------3.Borrow Books-------------------------------<<<");
gotoxy(30,22);
textcolor(RED);
cputs("Please Select!!!");
flg=getch();
if(flg=='2')
	bookss();
if(flg=='1')
	users();
if(flg=='3')
	borrow();
if(flg==27)
{
	flg=-1;
	return;
}
}
}
void admin()
{
while(1)
{
choose();
if(flg=='1')
bookss();
if(flg=='2')
users();
if(flg=='3')
borrow();
if(flg==27)
{
return;
}
}
}

操作界面函数

void user(Ulink h)
{
int flag;
BBlink l,p,r;/* 连表 */
FILE *fp; /* 文件指针 */
int count=0;
l=(BBnode*)malloc(sizeof(BBnode));
l->next=NULL;
r=l;
fp=fopen(bfile,"rb");
if(fp==NULL)
{
	fp=fopen(bfile,"wb");
}
while(!feof(fp))
{
	p=(BBnode*)malloc(sizeof(BBnode));
	if(fread(p,sizeof(BBnode),1,fp)) /* 将文件的内容放入接点中 */
	{
		p->next=NULL;
        r->next=p;
        r=p; /* 将该接点挂入连中 */
        count++;
    }
}
	while(1)
{
	textbackground(179);
	clrscr();
	textcolor(YELLOW);
	box(1,1,80,24);
	h_line(2,3,78);
	gotoxy(3,2);
	textcolor(RED);
	cputs("A.");
	textcolor(BLUE);
	cputs("my message  ");
	textcolor(RED);
	cputs("B.");
	textcolor(BLUE);
	cputs("modyfy my message  ");
	textcolor(RED);
	cputs("C.");
	textcolor(BLUE);
	cputs("my borrow  ");
	textcolor(RED);
	cputs("D.");
	textcolor(BLUE);
	cputs("search book");
	textcolor(YELLOW);
	gotoxy(50,50);
	flag=getch();
    switch(flag)
	{
	case 'a':
		show(os);

		break; /*************添加用户**********/
	case 'b':
		Modify_user(h);
		Save(h);

		break;/*************删除用户**********/
	case 'c':
		Myborrow();
		break;
	case 'd':
		usersearch();

		break;
	case 27:
		return;

	} 

} 

}

添加函数

图书的添加,包括用户添加以及管理员添加

void add(blink l)
{
Bnode *p,*r,*s;
char num[10];
r=l;
s=l->next;
while(r->next!=NULL)
	r=r->next;
textcolor(RED);
gotoxy(25,4);
cputs("INPUT THE MESSAGE ABOUT BOOK");
gotoxy(31,10);
textcolor(YELLOW);
cputs("Book ID:");
scanf("%s",num);
p=(Bnode *)malloc(sizeof(Bnode));
while(s)
{
	if(strcmp(s->data.num,num)==0)
	{
		textcolor(WHITE);
		gotoxy(25,15);
		cputs("This ID:");
		printf("'%s'",num);
		cputs("is exist!");
		gotoxy(25,22);
		cputs("please Press any key to continue...");
		gotoxy(255,252);
		getch();
		return;
	}
	s=s->next;
}
strcpy(p->data.num,num);
gotoxy(31,12);
textcolor(YELLOW);
cputs("Input Book name:");
scanf("%s",p->data.name);
gotoxy(31,14);
cputs("input your Book auth:");
scanf("%s",p->data.auth);
gotoxy(31,16);
cputs("input your Book count:");
scanf("%d",&p->data.count);
bookcount=p->data.count+bookcount;
p->data.sum=0;
p->next=NULL;
r->next=p;
r=p;
gotoxy(30,22);
textcolor(RED);
cputs("Add Book Success !!!");
getch();
textcolor(YELLOW);
} 

 /*******管理员添加用户*******/
void Add(Ulink l)
{
Unode *p,*r,*s;
char num[10];
r=l;
s=l->next;
while(r->next!=NULL)
	r=r->next;
textcolor(RED);
gotoxy(25,4);
cputs("INPUT THE MESSAGE ABOUT BOOK");
gotoxy(31,10);
textcolor(YELLOW);
cputs("User ID:");
scanf("%s",num);
p=(Unode *)malloc(sizeof(Unode));
while(s)
{
	if(strcmp(s->data.num,num)==0)
	{
		gotoxy(25,15);
		cputs("This ID:");
		printf("'%s'",num);
		cputs("is exist!");
		gotoxy(25,22);
		textcolor(RED);
		cputs("please Press any key to continue...");
		gotoxy(255,252);
		getch();
		return;
	}
	s=s->next;
}
strcpy(p->data.num,num);
gotoxy(31,12);
textcolor(YELLOW);
cputs("Input Password:");
scanf("%s",p->data.pass);
gotoxy(31,14);
cputs("input your name:");
scanf("%s",p->data.name);
gotoxy(31,16);
cputs("input the sex:");
scanf("%s",p->data.sex);
p->next=NULL;
r->next=p;
r=p;
gotoxy(30,22);
cputs("Add User Success !!!");
usercount++;
getch();
textcolor(YELLOW);
} 

查找函数

用户查找以及管理员查找

/*******管理员查找图书*******/
void qur(blink l)
{
int sel;
char findmess[20];
Bnode *p; 

if(!l->next)
{
gotoxy(30,4);
textcolor(WHITE);
     cputs("Not Find Bookdata!!!");
	 getch();
    return;
}
textcolor(RED);
gotoxy(25,4);
cputs("Please Select Search  Type !");
gotoxy(10,8);
textcolor(WHITE);
cputs("1.Search by ID");
gotoxy(10,10);
cputs("2.Search by Name");
gotoxy(10,12);
cputs("Please Select 1 or 2:");
scanf("%d",&sel);
if(sel==1)
{
	gotoxy(36,8);
	textcolor(YELLOW);
	cputs("Input the search ID:");
	scanf("%s",findmess);
	p=locate(l,findmess,"num");
	if(p)
	{
		gotoxy(36,12);
		textcolor(WHITE);
		cputs("Book ID:");
		printf("%s",p->data.num);
		gotoxy(36,14);
		textcolor(WHITE);
		cputs("Book Name:");
		printf("%s",p->data.name);
		gotoxy(36,16);
		textcolor(WHITE);
		cputs("Book author:");
		printf("%s",p->data.auth);
		gotoxy(36,18);
		textcolor(WHITE);
		cputs("Book count:");
		printf("%d",p->data.count);
		getch();
		textcolor(YELLOW);
		gotoxy(30,21);
		cputs("Search Success !!");
	}
	else
	{
		gotoxy(30,22);
		textcolor(RED);
		cputs("Not finde !!!");
		getch();
	}
}
else if(sel==2) /* 姓名 */
{
	gotoxy(36,8);
	textcolor(YELLOW);
	cputs("Input the search name:");
	scanf("%s",findmess);
	p=locate(l,findmess,"name");
	if(p)
	{
		gotoxy(36,12);
		textcolor(WHITE);
		cputs("Book ID:");
		printf("%s",p->data.num);
		gotoxy(36,14);
		textcolor(WHITE);
		cputs("Book Name:");
		printf("%s",p->data.name);
		gotoxy(36,16);
		textcolor(WHITE);
		cputs("Book author:");
		printf("%s",p->data.auth);
		gotoxy(36,18);
		textcolor(WHITE);
		cputs("Book count:");
		printf("%d",p->data.count);
		getch();
		textcolor(YELLOW);
	}
	else
	{
		textcolor(RED);
		gotoxy(30,22);
		cputs("Not finde !!!");
	}
}
else
{
	textcolor(RED);
	gotoxy(30,22);
	cputs("Error !!");
	getch();
}
} 

/*******用户查找图书*******/
void usersearch()
{
int sel;
char findmess[20];
Bnode *p;
blink l;/* 连表 */
FILE *fp; /* 文件指针 */
int count=0;
Bnode *P,*r;
l=(Bnode*)malloc(sizeof(Bnode));
l->next=NULL;
r=l;
fp=fopen(file,"rb");
if(fp==NULL)
{
	fp=fopen(file,"wb");
 }
while(!feof(fp))
{
    P=(Bnode*)malloc(sizeof(Bnode));
    if(fread(P,sizeof(Bnode),1,fp)) /* 将文件的内容放入接点中 */
    {
        P->next=NULL;
		bookcount=bookcount+P->data.count;
		booksum=booksum+P->data.sum;
        r->next=P;
        r=P; /* 将该接点挂入连中 */
        count++;
    }
}
fclose(fp); /* 关闭文件 */ 

if(!l->next)
{
gotoxy(30,4);
textcolor(WHITE);
     cputs("Not Find Bookdata!!!");
	 getch();
    return;
}
textcolor(RED);
gotoxy(25,4);
cputs("Please Select Delete  Type !");
gotoxy(10,8);
textcolor(WHITE);
cputs("1.Search by ID");
gotoxy(10,10);
cputs("2.Search by Name");
gotoxy(10,12);
cputs("Please Select 1 or 2:");
scanf("%d",&sel);
if(sel==1)
{
	gotoxy(36,8);
	textcolor(YELLOW);
	cputs("Input the search ID:");
	scanf("%s",findmess);
	p=locate(l,findmess,"num");
	if(p)
	{
		gotoxy(36,12);
		textcolor(WHITE);
		cputs("Book ID:");
		printf("%s",p->data.num);
		gotoxy(36,14);
		textcolor(WHITE);
		cputs("Book Name:");
		printf("%s",p->data.name);
		gotoxy(36,16);
		textcolor(WHITE);
		cputs("Book author:");
		printf("%s",p->data.auth);
		gotoxy(36,18);
		textcolor(WHITE);
		cputs("Book count:");
		printf("%d",p->data.count-p->data.sum);
		getch();
		textcolor(YELLOW);
	}
	else
	{
		gotoxy(30,22);
		textcolor(RED);
		cputs("Not finde !!!");
		getch();
	}
}
else if(sel==2)
{
	gotoxy(36,8);
	textcolor(YELLOW);
	cputs("Input the search name:");
	scanf("%s",findmess);
	p=locate(l,findmess,"name");
	if(p)
	{
		gotoxy(36,12);
		textcolor(WHITE);
		cputs("Book ID:");
		printf("%s",p->data.num);
		gotoxy(36,14);
		textcolor(WHITE);
		cputs("Book Name:");
		printf("%s",p->data.name);
		gotoxy(36,16);
		textcolor(WHITE);
		cputs("Book author:");
		printf("%s",p->data.auth);
		gotoxy(36,18);
		textcolor(WHITE);
		cputs("Book count:");
		printf("%d",(p->data.count-p->data.sum));
		getch();
		textcolor(YELLOW);
	}
	else
	{
		textcolor(RED);
		gotoxy(30,22);
		cputs("Not finde !!!");
	}
}
else
{
	textcolor(RED);
	gotoxy(30,22);
	cputs("Error !!");
	getch();
}
} 

/*******图书查找*******/
int cmpbook(blink l,char id[],char na[])
{
char findm[20];
Bnode *p;
if(!l->next)
{
	gotoxy(25,4);
	textcolor(RED);
     cputs("Not Find Book!!!");
	 getch();
    return 0;
}
strcpy(findm,id);
	p=locate(l,findm,"num");
	if(p)
	{
		strcpy(findm,na);
		p=locate(l,findm,"name");
		if(p)
		{
			return 1;
		}
		else
		{
			textcolor(RED);
			gotoxy(30,22);
			cputs("Book name is NULL !!!");
			getch();
			return 0;
		}
	}
	else
	{
		gotoxy(30,22);
		textcolor(RED);
		cputs("Book id is NULL !!!");
		getch();
		return 0;
	}

} 

删除函数

图书的删除

void del(blink l)
{
	int sel;
	Bnode *p,*r;
	char findmess[20];
	if(!l->next)
	{
		gotoxy(25,4);
		textcolor(RED);
		cputs("=====>not thing could delete!\n");
		getch();
		return;
	}
	textcolor(RED);
	gotoxy(25,4);
	puts("Please Select Delete  Type !");
	gotoxy(10,8);

	textcolor(WHITE);
	cputs("1.Delete by Book ID");
	gotoxy(10,10);
	cputs("2.Delete by Book Name");
	gotoxy(10,12);
	cputs("Please Select 1 or 2:");
	scanf("%d",&sel);
	if(sel==1)
	{
		gotoxy(36,8);
		textcolor(YELLOW);
		cputs("Input the delete ID:");
		scanf("%s",findmess);
		p=locate(l,findmess,"num");
		if(p)
		{
			bookcount=bookcount-p->data.count;
			r=l;
			while(r->next!=p)
				r=r->next;
			r->next=p->next;
			free(p);
			gotoxy(30,22);
			textcolor(RED);
			cputs("Delete success!\n");
			textcolor(YELLOW);
		}
		else
		{
	textcolor(RED);
	gotoxy(30,22);
	cputs("Error !!");
		}
	}
	else if(sel==2)
	{
		gotoxy(36,8);
		textcolor(YELLOW);
		cputs("Input the delete name:");
		scanf("%s",findmess);
		p=locate(l,findmess,"name");
		if(p)
		{
			r=l;
			while(r->next!=p)
				r=r->next;
			r->next=p->next;
			free(p);
			gotoxy(30,22);
			textcolor(RED);
			cputs("Delete success!\n");
			bookcount--;
			textcolor(YELLOW);
		}
		else
		{
			gotoxy(25,18);
			cputs("Not find!!");
		}
	}
	else
	{
	textcolor(RED);
	gotoxy(30,22);
	cputs("Error !!");
	}
	getch();
	textcolor(YELLOW);
} 

借书管理函数

void borrow()
{
while(1)
{
int flag;
BBlink l,p,r;/* 连表 */
FILE *fp; /* 文件指针 */
int count=0;
l=(BBnode*)malloc(sizeof(BBnode));
l->next=NULL;
r=l;
fp=fopen(bfile,"rb");
if(fp==NULL)
{
	fp=fopen(bfile,"wb");
}
while(!feof(fp))
{
	p=(BBnode*)malloc(sizeof(BBnode));
	if(fread(p,sizeof(BBnode),1,fp)) /* 将文件的内容放入接点中 */
	{
		p->next=NULL;
        r->next=p;
        r=p; /* 将该接点挂入连中 */
        count++;
    }
	borrowcount=count;
}
while(1)
{
	textbackground(179);
	clrscr();
	textcolor(YELLOW);
	box(1,1,80,24);
	h_line(2,3,78);
	gotoxy(3,2);
	textcolor(RED);
	cputs("B");
	textcolor(BLUE);
	cputs("orrow book  ");
	textcolor(RED);
	cputs("R");
	textcolor(BLUE);
	cputs("eturn book  ");
	textcolor(RED);
	cputs("S");
	textcolor(BLUE);
	cputs("earch borrow  ");
	textcolor(YELLOW);
	printf("count: (borrow=%d)",borrowcount);
	textcolor(RED);
	gotoxy(50,50);
	flag=getch();
    switch(flag)
	{
	case 'b':
		Add_borrow(l);

		break; /*************添加用户**********/
	case 'r':
		Del_borrow(l);
		Save_borrow(l);
		break;
	case 's':
		Qur_borrow(l);
		break;
	case 27:
		return;

	}
     }
  }
}
 

信息储存函数

图书信息的储存

*******借书信息保存*******/
void Save_borrow(BBlink l)
{
 FILE* fp;
 BBnode *p;
 int flag=1,count=0;
 fp=fopen(bfile,"wb");
 if(fp==NULL)
 {
gotoxy(35,12);
	textcolor(RED);
      cputs("open error!");
      exit(1);
 }
 p=l->next;
 while(p)
 {
      if(fwrite(p,sizeof(BBnode),1,fp)==1)
      {
          p=p->next;
          count++;
      }
      else
      {
          flag=0;
          break;
      }
}
if(flag)
{
textcolor(RED);
gotoxy(30,24);
 /*** printf("save success.(saved%d.)",count);**调试的时候用的*/
}
fclose(fp);
} 

还书函数

/* 还书的操作 */
void Del_borrow(BBlink l)
{
		int sel;
	BBnode *p,*r;
	Bnode *L;
	char findmess[20];
	FILE *fp; /* 文件指针 */
Bnode *P,*R,*Q;
L=(Bnode*)malloc(sizeof(Bnode));
L->next=NULL;
R=L;
fp=fopen(file,"rb");
if(fp==NULL)
{
	fp=fopen(file,"wb");
 }
while(!feof(fp))
{
    P=(Bnode*)malloc(sizeof(Bnode));
    if(fread(P,sizeof(Bnode),1,fp)) /* 将文件的内容放入接点中 */
    {
        P->next=NULL;
        R->next=P;
        R=P; /* 将该接点挂入连中 */
    }
}
fclose(fp); /* 关闭文件 */

	if(!l->next)
	{
		gotoxy(30,4);
		textcolor(RED);
		cputs("not Book could Return!\n");
		getch();
		return;
	}
	textcolor(RED);
	gotoxy(25,4);
	puts("Please Select Return  Type !");
	gotoxy(10,8);

	textcolor(WHITE);
	cputs("1.Return by Borrow ID");
	gotoxy(10,10);
	cputs("2.Return by book name");
	gotoxy(10,12);
	cputs("Please Select 1 or 2:");
	scanf("%d",&sel);
	if(sel==1)
	{
		gotoxy(36,8);
		textcolor(YELLOW);
		cputs("Input the Borrow ID:");
		scanf("%s",findmess);
		p=Locate_borrow(l,findmess,"num");
		if(p)
		{

				Q=locate(L,findmess,"num");
				if(Q)
				{
					Q->data.sum=Q->data.sum-1;
						save(L);
				}
			r=l;
			while(r->next!=p)
				r=r->next;
			r->next=p->next;
			free(p);
			gotoxy(30,22);
			textcolor(RED);
			cputs("Return success!\n");
			borrowcount--;
			getch();
			textcolor(YELLOW);
		}
		else
		{
			gotoxy(30,22);
			textcolor(RED);
			cputs("Note find !!");
			getch();

		}
	}
	else if(sel==2)
	{
		gotoxy(36,8);
		textcolor(YELLOW);
		cputs("Input the Book name:");
		scanf("%s",findmess);
		p=Locate_borrow(l,findmess,"book");
		if(p)
		{ 

				Q=locate(L,findmess,"name");
				if(Q)
				{
					Q->data.sum=Q->data.sum-1;
						save(L);
				} 

			r=l;
			while(r->next!=p)
				r=r->next;
			r->next=p->next;
			free(p);
			gotoxy(30,22);
			textcolor(RED);
			cputs("Borrow success!\n");
			borrowcount--;
			getch();
			textcolor(YELLOW);
		}
		else
		{
			gotoxy(30,18);
			textcolor(RED);
			cputs("Not find!!");
			getch();
		}
	} 

	else
	{
		gotoxy(30,22);
		textcolor(RED);
		cputs("Not finde !!");
		getch();
	}
	textcolor(YELLOW);
} 

修改函数

也分为用户和管理员两种情况

/* ****用于管理员修改用户资料 ***/
void Modify(Ulink l)
{
	Unode *p;
	char findmess[20];
	if(!l->next)
	{
		gotoxy(30,4);
		textcolor(RED);
		cputs("not thing could modify!");
		getch();
		return;
	}
	gotoxy(30,4);
	textcolor(RED);
	cputs("Modify User Message");
	gotoxy(25,8);
	textcolor(YELLOW);
	cputs("input the User Id:");
	scanf("%s",findmess);
	p=Locate(l,findmess,"num");
	if(p)
	{
		textcolor(YELLOW);
		gotoxy(25,10);
		printf("Inpute The New ID(old:%s):",p->data.num);
		scanf("%s",p->data.num);
		gotoxy(25,12);
		printf("Input The New Password(old:%s):",p->data.pass);
		scanf("%s",p->data.pass);
		gotoxy(25,14);
		printf("Input The New Name(old:%s):",p->data.name);
		scanf("%s",p->data.name);
		gotoxy(25,16);
		printf("Input The New Sex(old:%s):",p->data.sex);
		scanf("%s",p->data.sex);
		gotoxy(30,20);
		textcolor(RED);
		cputs("Modify Success !!!");
		getch();
		textcolor(YELLOW);
	}
	else
	{
		gotoxy(30,16);
		textcolor(RED);
		cputs("Not Finde !!!");
		getch();
	}
} 

 /****供用户修改用户自己资料 */
void Modify_user(Ulink l)
{
	Unode *p;
	char findmess[20];
	if(!l->next)
	{
		gotoxy(30,4);
		textcolor(RED);
		cputs("not thing could modify!");
		getch();
		return;
	}
	gotoxy(30,4);
	textcolor(RED);
	cputs("Modify User Message");
	gotoxy(33,8);
	textcolor(YELLOW);
	strcpy(findmess,os->data.num);
	printf("your id:%s",findmess);
	p=Locate(l,findmess,"num");
	if(p)
	{
		textcolor(YELLOW);
		gotoxy(24,10);
		printf("Input The New Password(old:%s):",p->data.pass);
		scanf("%s",p->data.pass);
		gotoxy(24,12);
		printf("Input The New Name(old:%s):",p->data.name);
		scanf("%s",p->data.name);
		gotoxy(24,14);
		printf("Input The New Sex(old:%s):",p->data.sex);
		scanf("%s",p->data.sex);
		gotoxy(31,18);
		textcolor(RED);
		cputs("Modify Success !!!");
		getch();
		textcolor(YELLOW);
	}
	else
	{
		gotoxy(30,16);
		textcolor(RED);
		cputs("Not Finde !!!");
		getch();
	}
} 

添加借书函数

/*******添加借书*******/
void Add_borrow(BBlink l)
{
Ulink H;/* 连表 */
FILE *Fp; /* 文件指针 */
Unode *Q,*T;
blink L;/* 连表 */
FILE *FP; /* 文件指针 */
int ttl;

Bnode *P,*R;
char bookid[20];
char bookname[20];
char userid[20];
BBnode *p,*r,*s;
char num[10];
r=l;
s=l->next;
while(r->next!=NULL)
	r=r->next;
L=(Bnode*)malloc(sizeof(Bnode));
L->next=NULL;
R=L;
FP=fopen(file,"rb");
if(FP==NULL)
{
	FP=fopen(file,"wb");
 }
while(!feof(FP))
{
    P=(Bnode*)malloc(sizeof(Bnode));
    if(fread(P,sizeof(Bnode),1,FP)) /* 将文件的内容放入接点中 */
    {
        P->next=NULL;
		bookcount=bookcount+P->data.count;
        R->next=P;
        R=P; /* 将该接点挂入连中 */ 

    }
}
fclose(FP); /* 关闭文件 */ 

H=(Unode*)malloc(sizeof(Unode));
H->next=NULL;
T=H;
Fp=fopen(ufile,"rb");
if(Fp==NULL)
{
	Fp=fopen(ufile,"wb");
 }
while(!feof(Fp))
{
    Q=(Unode*)malloc(sizeof(Unode));
    if(fread(Q,sizeof(Unode),1,Fp)) /* 将文件的内容放入接点中 */
    {
        Q->next=NULL;
        T->next=Q;
        T=Q; /* 将该接点挂入连中 */
    }
}
fclose(Fp);
textcolor(RED);
gotoxy(25,4);
cputs("Please input thease message");
gotoxy(30,10);
textcolor(YELLOW);
cputs("Input Borrow ID:");
scanf("%d",&ttl);
itoa(ttl,num,10) ;
p=(BBnode *)malloc(sizeof(BBnode));
while(s)
{
	if(strcmp(s->id,num)==0)
	{
		gotoxy(30,15);
		cputs("Borrow ID:");
		printf("'%s'",num);
		cputs("is exist!");
		gotoxy(26,22);
		textcolor(RED);
		cputs("please Press any key to continue...");
		gotoxy(255,252);
		getch();
		return;
	}
	s=s->next;
}
strcpy(p->id,num);
gotoxy(31,12);
textcolor(YELLOW);
cputs("Input book id:");
scanf("%s",bookid);
gotoxy(31,14);
textcolor(YELLOW);
cputs("Input book name:");
scanf("%s",bookname);/***************************************图书判断在否***************************************/
if(cmpbook(L,bookid,bookname))
{
	strcpy(p->bookid,bookid);
	strcpy(p->book,bookname);
	gotoxy(31,16);
cputs("input your ID:");
scanf("%s",userid); /**************************************用户判断在否********************************/
if(cmpuser(H,userid))
{
	strcpy(p->user,userid);
	p->next=NULL;
r->next=p;
r=p;
if(changeb(L,bookid))
{
gotoxy(30,22);
cputs("Borrow Success !!!");
Save_borrow(l);
borrowcount++;

getch();
}
}

}

textcolor(YELLOW);
} 

查找借书函数

查找自己借了哪些书

void Myborrow()
{
int i;

BBlink l,p,r;/* 连表 */
FILE *fp; /* 文件指针 */
int count=0;
l=(BBnode*)malloc(sizeof(BBnode));
l->next=NULL;
r=l;
fp=fopen(bfile,"rb");
if(fp==NULL)
{
	fp=fopen(bfile,"wb");
}
i=6;
while(!feof(fp))
{

	p=(BBnode*)malloc(sizeof(BBnode));
	if(fread(p,sizeof(BBnode),1,fp)) /* 将文件的内容放入接点中 */
	{
		textcolor(WHITE);
		gotoxy(30,4);
		cputs("Your borrow book");

		if(strcmp(p->user,os->data.num)==0)
		{
			textcolor(YELLOW);

			gotoxy(20,i);
			printf("Borrow ID:%s\tBook id:%s\tBook name:%s",p->id,p->bookid,p->book);
			i++;

			p->next=NULL;
			r->next=p;
			r=p; /* 将该接点挂入连中 */
			count++;
		}
    }
	myborrow=count;
	if(myborrow==0)
	{
		textcolor(YELLOW);
		gotoxy(30,13);
		cputs("You  no borrow !!");

	}

}
fclose(fp);
textcolor(YELLOW);
	gotoxy(65,2);
	printf("(borrow=%d)",myborrow);

	getch();

}

借书管理函数

void borrow()
{
while(1)
{
int flag;
BBlink l,p,r;/* 连表 */
FILE *fp; /* 文件指针 */
int count=0;
l=(BBnode*)malloc(sizeof(BBnode));
l->next=NULL;
r=l;
fp=fopen(bfile,"rb");
if(fp==NULL)
{
	fp=fopen(bfile,"wb");
}
while(!feof(fp))
{
	p=(BBnode*)malloc(sizeof(BBnode));
	if(fread(p,sizeof(BBnode),1,fp)) /* 将文件的内容放入接点中 */
	{
		p->next=NULL;
        r->next=p;
        r=p; /* 将该接点挂入连中 */
        count++;
    }
	borrowcount=count;
}
while(1)
{
	textbackground(179);
	clrscr();
	textcolor(YELLOW);
	box(1,1,80,24);
	h_line(2,3,78);
	gotoxy(3,2);
	textcolor(RED);
	cputs("B");
	textcolor(BLUE);
	cputs("orrow book  ");
	textcolor(RED);
	cputs("R");
	textcolor(BLUE);
	cputs("eturn book  ");
	textcolor(RED);
	cputs("S");
	textcolor(BLUE);
	cputs("earch borrow  ");
	textcolor(YELLOW);
	printf("count: (borrow=%d)",borrowcount);
	textcolor(RED);
	gotoxy(50,50);
	flag=getch();
    switch(flag)
	{
	case 'b':
		Add_borrow(l);

		break; /*************添加用户**********/
	case 'r':
		Del_borrow(l);
		Save_borrow(l);
		break;
	case 's':
		Qur_borrow(l);
		break;
	case 27:
		return;

	} 

} 	

}

}

主函数

main()
{

Ulink h,os;/* 连表 */
FILE *fp; /* 文件指针 */
Unode *p,*r;
h=(Unode*)malloc(sizeof(Unode));
h->next=NULL;
r=h;
fp=fopen(ufile,"rb");
if(fp==NULL)
{
	fp=fopen(ufile,"wb");
 }
while(!feof(fp))
{
    p=(Unode*)malloc(sizeof(Unode));
    if(fread(p,sizeof(Unode),1,fp)) /* 将文件的内容放入接点中 */
    {
        p->next=NULL;
        r->next=p;
        r=p; /* 将该接点挂入连中 */

    }
}
fclose(fp);
system("wellcome");
	if(flg==27)
	{
		flg=-1;
		return;
	}
		while(1)
		{
			flag=login(h);
			if(flg==27)
				{
					flg=-1;
					break;
				}

				if(flag==2)
				{
					choose();
					flag=0;
				}
				if(flag==1)
				{
					user(h);
					flag=0;
				}

		}

}

总结

今天的代码量有点小多,难度也不小,用了大量的链表来储存数据,还有一些功能因为篇幅的问题没有放上来,总的来说,这个图书管理系统的功能是很全面的,无论从哪个角度来看。当然啦。有兴趣的同学可以进群领取完整的源码看看,绝对是一个不错的机会,可以说,你要是学会了这个系统,你的C语言在我看来就完全没有问题了,而且在数据结构一块,你也算是小成了,所以希望大家可以认真学习,争取早日掌握。

这也是2022年的第一篇文章了,希望2022继续加油,向大家分享更多有趣的、有用的知识,十分感谢大家的一路支持,后续我还会发布更多的项目源或者学习资料,希望大家可以持续关注。

到此这篇关于C语言大作业之图书管理系统的实现详程的文章就介绍到这了,更多相关C语言 图书管理系统内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C语言链表实现图书管理系统

    之前参照网上的资料用链表实现了图书管理系统,包括简单的增删改查功能以及借书还书功能,我是VC6.0下写的一个控制台程序,格式参照的网上的.在动手编码之前,你需要理清自己的思路.首先,需要确定图书馆里系统中主要有那几个对象,这里我写了学生对象和图书对象.不妨在纸上写出或画出它们主要包括哪些属性以及其可能的对应关系,这里根据不同人的要求会有所不同.清楚这些之后,就可以设计学生和图书的数据结构,比如这里我用的结构体存储其信息.然后就需要考虑,我想要哪些功能,除了基本的增删改查之外,我还想要哪些功能?比

  • 基于C语言实现图书管理信息系统设计

    本文实例为大家分享了图书管理信息系统的设计与实现,供大家参考,具体内容如下 #include<stdio.h> #include<string.h> #define BookSize 100 #define BLHum 50 #define BLHnum 50 #define RRnum 50 /*主数据库文件*/ typedef struct { int bno; char bname[21]; int namenext; char author[9]; int authnext

  • C语言图书管理系统简洁版

    DOS界面的图书管理系统,具体内容如下 程序分为两块:管理员操作(收录图书.删除图书等)和会员操作(注册.借书.还书等): 1.管理员操作界面 2.会员操作界面 global.h头文件:(程序中只使用了一个编写的头文件,在这里存放了所有的接口函数以及需要使用到的头文件,还有结构体的定义) #include "iostream" #include "string" #include "fstream" #include "conio.h&

  • C语言图书管理系统课程设计

    这是本人大一第二学期初C语言课程设计的作品,嘿嘿,本来以为已经找不到原稿了,今天无意中竟然在QQ网络硬盘中找到了当初的teta版,发布于此,以作纪念. C 源代码如下: #include<stdio.h> #include<stdlib.h> #include<string.h> struct book{ char book_name[30]; int bianhao; double price; char author[20]; char state[20]; cha

  • C语言实现图书管理系统

    目前为止跟着学校进度学习C语言大概半年左右,基础学习只学到了指针,学得非常浅.说实话,起初对C语言的印象---只是一个学习计算机语言的敲门砖,对具体C语言如何应用等,非常迷茫.直到大一下半学期的高级语言设计课程之后,试过dos运行的图形化界面的完整小程序,才发现C语言的魅力. ok,废话不多说了,下面是我第二节课的作品----C语言的图书管理系统.一个简单的小程序.并非纯原创,是基于网络搜索到的"学生管理系统"改编而成的.通过直接浏览.修改一个完整的代码,我的收获颇丰.我认为这样比枯燥

  • C语言实现简单的图书管理系统

    本文实例为大家分享了C语言实现简单图书管理系统的具体代码,供大家参考,具体内容如下 代码: /* 课程设计项目名称:图书查询系统 作者:施瑞文 时间:2018.3.4 */ #include<stdio.h> #include<string.h> #include<windows.h> #include<conio.h> #include<stdlib.h> #define N sizeof(struct BOOK) struct BOOK //

  • C语言大作业之图书管理系统的实现详程

    目录 主要内容 概要设计 项目源码 结构体 登录界面函数 选择界面函数 操作界面函数 添加函数 查找函数 删除函数 借书管理函数 信息储存函数 还书函数 修改函数 添加借书函数 查找借书函数 借书管理函数 主函数 总结 序 时间在流去,我们在长大. 嗨,这里是狐狸~~ 今天是2022年的一月四日了,元旦小长假也过去了,新年新气象,新年新目标,我们要向前看,不要执意过去了,感谢过去,把握现在,展望未来,这是我们现在应该做的.好了,废话不多说,今天我们分享一个系统,确实也有许久没有分享过系统了,今天

  • JAVA大作业之图书管理系统实现全解

    目录 一.简介 二.系统的设计 1.Book包: 1.1.book类: 1.2.bookList类: 2.Operation包: 2.1.增加书籍: 2.2.删除书籍: 2.3.借阅书籍 2.4.归还书籍 2.5.显示书籍 2.6.查找书籍 2.7.整理书籍 2.8.退出系统 3.User包: 3.1.User 3.2.管理员 3.3.普通用户 4.程序的运行 三.结尾 一.简介 在学习了Java语法的类.接口.继承.多态.接口等基础语法后的一简单的项目练习. 具体功能为: 1.简单的根据姓名的

  • C语言单链表实现图书管理系统

    本文实例为大家分享了C语言单链表实现图书管理系统的具体代码,供大家参考,具体内容如下 单链表实现的图书管理系统相比于结构体实现的管理系统,可以随时开辟新的空间,可以增加书的信息 单链表的实现 首先肯定还是打印单链表的常规操作,创建表头,创建节点,表头法插入,特定位置删除,打印链表 struct book {     char name[20];     float price;     int num;          //书的数量 }; //3 数据容器--链表 struct Node {

  • C语言链表实现简单图书管理系统

    本文实例为大家分享了C语言链表实现图书管理系统的具体代码,供大家参考,具体内容如下 实现功能: 用C语言制作图书管理系统,实现图书进行登记书籍,浏览书籍,借阅书籍,归还书籍,书籍排序,删除书籍信息,查找书籍等功能. 功能展示 1.登记书籍 2.浏览书籍 3.借阅书籍 4.归还书籍 5.书籍排序 6.删除书籍 7.查找书籍 8.退出程序 代码如下 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h>

  • ASP.NET实现图书管理系统的步骤详解

    一.数据库添加 1.用户信息 2.图书信息表 3.图书借阅信息表 二.版本页面 vs2010+sqlserver2008 三.实现功能 1. 用户注册登录2. 两种身份:管理员和读者3. 读者能够注册自己的账号和密码还有填写自己的个人信息4. 读者根据自己需求的借阅和归还图书5. 管理员可以增.减.查.改等图书信息,修改用户信息待完善 四.主要页面展示 1.登录页面 2.用户注册 3.个人信息表 4.用户归还图书 5.用户借阅书籍 6.用户检索书籍 7.管理员页面 五.简单代码 1.注册页面(内

  • C语言实现图书管理系统(文件数据库)

    本文实例为大家分享了C语言实现图书管理系统的具体代码,供大家参考,具体内容如下 简介 c语言的一个大作业,发上来纪念下嘿嘿.写的不是很好,很多东西都揉在一起来,不过注释写的也挺多,希望能帮到有需要的朋友. 题目要求 简单文件数据库-模拟图书馆管理系统 涉及知识点:文件读写.内存管理.结构体定义.基本数据结构.高级格式化输入输出 要求: 编写一个程序模拟图书管理系统.用户分为管理员和读者两类,分别显示不同文本格式菜单,通过菜单项对应数字进行选择.读者菜单包括借书.还书.查询等功能.管理员菜单包括图

随机推荐