读书人

小型图书管理系统的一些功能实现讨教

发布时间: 2012-02-14 19:19:19 作者: rapoo

小型图书管理系统的一些功能实现,讨教!
小型图书管理系统中,如何实现图书的借入和归还功能,而且能保存记录!以方便以后查询!希望各位大侠不吝赐教,在下只是做课程设计是遇到的难题,望大家不吝赐教,多谢多谢!

[解决办法]
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>

void page_title(char *menu_item)
{
printf( "***************************C语言 *******************************\n ");
printf( "---------图书馆管理系统 --------\n\n- %s -\n\n ",menu_item);
}

int booknumber=0; /*书的数目*/
struct BOOK
{long int id;
int store; /*store=1表示书未被借出,store=0表示书已经被借出*/
float price;
char name[30],author[20];
}books[1000];

void book_add(void)
{
booknumber+=1;
page_title( "增加新书 ");
id: printf( "序号: ");
scanf( "%d ",&books[booknumber].id);
if(books[booknumber].id==0)
{
printf( "Error!id can 't be 0! ");
booknumber-=1;
goto id;
}
printf( "书名: ");
scanf( "%s ",&books[booknumber].name);
printf( "作者: ");
scanf( "%s ",&books[booknumber].author);
printf( "价格: ");
scanf( "%f ",&books[booknumber].price);
books[booknumber].store=1;
}

int search_book(void)
{
int n,i;
page_title( "查询图书 ");
printf( "请输入图书的序号: ");
scanf( "%d ",&i);
if (i> 0&&i <1001)
{for(n=0;n <=1000;n++)
{
if(books[n].id==i)
{
printf( "书名:%s\n ",books[n].name);
printf( "作者:%s\n ",books[n].author);
printf( "价格:%.2f\n ",books[n].price);
printf( "%d\n ",books[n].store);
return n;
}
}printf( "\n无效图书序号.\n ");
}
else printf( "\n无效图书序号.\n ");
return 0; /*若查不到图书,则反回0值*/
}



void book_del(void)
{
int n,k;
page_title( "删除旧书 ");
if((k=search_book())!=0)
{ char a[20],b[30];
for(n=k;n <=booknumber;n++)
{
books[n].id=books[n+1].id;
strcpy(a,books[n].author);strcpy(books[n].author,books[n+1].author);
strcpy(books[n+1].author,a);
strcpy(b,books[n].name);strcpy(books[n].name,books[n+1].name);
strcpy(books[n+1].name,b);
books[n].price=books[n+1].price;
books[n].store=books[n+1].store;
}
booknumber-=1;
printf( "该图书信息已删除.\n ");
}
else printf( "该图书未找到!\n ");
}

int peoplenumber=0; /*人的数目*/
struct PEOPLE
{
char name[20],sex[5];
int number;
int id;
}people[100];

void book_register(void)
{
page_title( "借书人注册 ");
peoplenumber+=1;
printf( "请输入借书人姓名: ");
scanf( "%s ",&people[peoplenumber].name);
printf( "请输入借书人性别: ");
scanf( "%S ",&people[peoplenumber].sex);
people[peoplenumber].id=peoplenumber;
people[peoplenumber].number=peoplenumber;
printf( "注册成功!请记住您的编号:%3d\n ",peoplenumber);
}

void book_borrow(void)
{
int bianhao;
int n,i;
page_title( "借阅图书 ");
if((n=search_book())!=0&&books[n].store==1)
{
printf( "请输入借书人编号: ");
scanf( "%d ",&bianhao);
for(i=0;i <=100;i++)
{
if(i!=bianhao)
continue;
else if(people[i].id==bianhao)
{
if (people[i].number> 2)

printf( "该借书人同时借书已达两本,不能借阅\n ");


else
{
books[n].store=0;
people[i].number++;
printf( "借阅成功!\n ");
}
}
else printf( "非注册会员,不能借书\n ");
}
}
else printf( "此书已经借出\n ");
}


void book_in(void)
{int i,n,bianhao;
page_title( "归还图书 ");
printf( "请输入所还图书的序号: ");
scanf( "%d ",&n);
printf( "请输入还书人的编号: ");
scanf( "%d ",&bianhao);
for(i=0;i <=100;i++)
{
if(i=people[i].id)
continue;
else if(people[i].id=bianhao)
{
books[n].store=1;
people[i].number--;
printf( "书已归还成功!\n ");
break;
}
else printf( "学号输入错误\n ");
}
}
void book_save()
{
FILE* fp;
if ((fp=fopen( "E:\\c++\\图书基本情况管理系统\\student ", "wt "))==NULL)
{ printf( "文件在打开时出现错误!\n ");
getch();
exit(1);
}
fwrite(books,sizeof(struct BOOK),1000,fp);
fwrite(people,sizeof(struct PEOPLE),100,fp);
fprintf(fp, "%d, ",booknumber);fprintf(fp, "%d, ",peoplenumber);

fclose(fp);
}
void book_read()
{FILE* fp;

if ((fp=fopen( "E:\\c++\\图书基本情况管理系统\\student ", "rt "))==NULL)
{printf( "文件在打开时出现错误!\n ");
getch();
exit(1);
}
fread(books,sizeof(struct BOOK),1000,fp);
fread(people,sizeof(struct PEOPLE),100,fp);
fscanf(fp, "%d, ",&booknumber);fscanf(fp, "%d, ",&peoplenumber);
fclose(fp);
}
void book_renew()
{ FILE* fp;
printf ( "你确定要清楚所有的数据吗?y/n\n ");
if (getch()== 'n ') return;
if ((fp=fopen( "E:\\图书基本情况管理系统\\student ", "wt "))==NULL)
{ printf( "初始化出现问题,请重新尝试。\n ");
getch();
exit(1);
}
fclose(fp);
printf( "请注意:清除数据后要重新启动系统才能生效!!!!\n ");
getch();
}

void book_bookshow()
{int i;

printf( "书号|书 名|作 者|状态|价 格\n ");
for ( i=1;i <=booknumber;i++)
{printf( "%4d|%s|%s|%4d|%6f\n ",books[i].id,books[i].name,
books[i].author,books[i].store,books[i].price); }getch();
}




int main(void)
{book_read(); //自动读取数据
printf( "%d,%d ",booknumber,peoplenumber);
menu: page_title( "操作选单 ");
printf( "请用数字键输入您想要的操作\n\n ");
printf( "1 增加新书\n2 查询图书\n3 删除旧书\n\n ");
printf( "4 借书人注册\n5 借阅图书\n6 归还图书\n\n ");
printf( "7 保存\n8 清除数据\n9 显示书目\n0退出\n\n ");

switch(getch())
{
case '1 ': book_add();break;
case '2 ': search_book();break;
case '3 ': book_del();break;
case '4 ': book_register();break;
case '5 ': book_borrow();break;
case '6 ': book_in();break;
case '7 ': book_save();break;
case '8 ': book_renew();break;
case '9 ': book_bookshow();break;
case '0 ': exit(0);
default : printf ( "请选择正确的选项!!!\n ");
}
goto menu;
return 0;
}

读书人网 >C++

热点推荐