图书信息管理系统c/c++

图书信息管理系统:
程序流程图
程序的构架图
源代码

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#define N 100

struct type{
	char ISBN[N];//ISBN编号(一般为13位) 
	char bookName[N]; //书名 
	char subject[N];//科目 
	char editor[N];//主编 
	float price;//价格 
	char publish[N];//出版社
	char date[N];//日期 
	int num;//数量 
	struct type *next;	
}Book;
typedef struct type * BooksManage;

void color(short x);//字体颜色 
int password();//管理员密码
void AdministratorMenu();//管理员菜单 
void VisitorMenu();//游客菜单
void SaveBooksdata(BooksManage head);//将数据保存到文件中
void AddBooks(BooksManage *head);//添加图书信息
void ReadBooksdata(BooksManage *head);//将数据从文件中读取 
void DelBooks_Subject(BooksManage head);//按所属学科删除图书信息
void DelBooks_ISBN(BooksManage head);//按ISBN删除图书信息 
void ModifyBooks(BooksManage head);//修改图书信息
void FindBooks(BooksManage head);//查询图书信息
void PrintBooks(BooksManage head);//显示所有图书信息 
void SumBooks(BooksManage head);//求全部图书价值 
int main()
{
	color(10); printf("\t\t\t\t\t* * * * * * * * * * * * * *\n");
	color(14); printf("\t\t\t\t\t* 题目:图书信息管理系统  *\n");
	color(11); printf("\t\t\t\t\t* 班级:                  *\n");
	color(12); printf("\t\t\t\t\t* 组员                    *\n");
	color(11); printf("\t\t\t\t\t* 姓名  学号              *\n");
	color(10); printf("\t\t\t\t\t* 张三   100001           *\n");
	color(11); printf("\t\t\t\t\t* 李四   100002           *\n");
	color(14); printf("\t\t\t\t\t* 王五   100003           *\n");
	color(12); printf("\t\t\t\t\t* 日期 : 2019.03.19      *\n");
	color(10); printf("\t\t\t\t\t* * * * * * * * * * * * * *\n");
	system("title 图书信息管理系统");
	color(10);
	BooksManage head = NULL;
	ReadBooksdata(&head);
	int choice,z,c;
	printf("\n\n\n");
	printf("\t\t\t※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
	printf("\t\t\t\t\t\t欢迎光临图书信息管理系统\n");
	printf("\t\t\t--------------------------------------------------------\n");
	printf("\t\t\t\t\t\t【1】游客\n");
	printf("\t\t\t\t\t\t【2】管理员\n");
	printf("\t\t\t\t\t\t【3】退出系统\n");
	printf("\t\t\t--------------------------------------------------------\n");
	while(printf("\t\t\t\t\t\t请选择身份:")&&scanf("%d",&c)!=EOF)
	{
		if(c==1)
		{
			VisitorMenu();
			while (printf("\t\t\t\t\t\t请输入选择项(1-3):")&&scanf("%d",&choice)!=EOF)
    		{
		    	switch (choice)
    			{
    				case 1:                                                /*查询图书信息*/
				    	FindBooks(head);
			    		break;
					case 2:                                                /*显示所有图书信息*/
    	            	PrintBooks(head);
			    		break; 
					case 3:                                                /*返回登录界面*/
						main();
						break;
					case 4:
						exit(0); 
			    	default:
				    	printf("\t\t\t\t\t输入错误!!!\n");
				    	system("pause");
				    	break;
				}
				VisitorMenu();
			}
		}
		else if(c==2)
		{
			z = password();
			AdministratorMenu();
			while (printf("\t请输入选择项(1-8):") && z == 1 && scanf("%d",&choice) != EOF)
    		{
	    		switch (choice)
    			{
		    		case 1:                                                /*录入图书信息*/
				    	AddBooks(&head);
			    		break;  
		    		case 2:                                                /*删除图书信息*/
			    		int sign;
			    		system("cls");
			    		color(10);printf("\t\t\t* * * * * * * * * * * * * * *\n");
			    		color(11);printf("\t\t\t*---------------------------*\n");
			    		color(12);printf("\t\t\t*  输入选择删除图书的方式   *\n");
			    		color(14);printf("\t\t\t*---------------------------*\n");
			    		color(11);printf("\t\t\t*【 1】按所属学科删除图书   *\n");
			    		color(12);printf("\t\t\t*---------------------------*\n");
			    		color(14);printf("\t\t\t*【 2】按图书ISBN号删除图书 *\n");
			    		color(11);printf("\t\t\t*---------------------------*\n");
			    		color(10);printf("\t\t\t* * * * * * * * * * * * * * *\n");
			    		scanf("\t\t\t%d",&sign);
			    		if(sign == 1)
			    			DelBooks_Subject(head);
			    		else if(sign == 2)
							DelBooks_ISBN(head);
			    		break;
		    		case 3:                                               
			    		ModifyBooks(head);
			   		 	break;
		    		case 4:                                                
				    	FindBooks(head);
			    		break;
					case 5:                                                
            	    	PrintBooks(head);
		    			break;
		    		case 6:                                                
            	    	SumBooks(head);
		    			break;	
		    		case 7:                                                
						main();
						break; 
					case 8:                                                
				    	SaveBooksdata(head);
						exit(0);
		    		default:
				    	printf("\t输入错误!!!\n");
				    	system("pause");
				    	break;
				}
				AdministratorMenu();
			}
		}
		else if(c==3)
			exit(0);
		else
		{
			printf("\t\t\t输入错误!!!\n\n");
		}
	}
	return 0;
}
 
/**管理员密码*/ 
int password()
{
	int i=0;
	char user[10]="admin";
	char Code[10]="admin";
	char getuser[10];
	char Getskey[10];
 
	while(1)
	{
		printf("\t\t\t请输入账号:");
		scanf("%s",getuser);
		printf("\t\t\t请输入密码:");
		while(1)
		{
			Getskey[i]=getch();       /*getch()函数在头文件conio.h中,函数作用为输入的内容不会在屏幕上显示*/
			if(Getskey[i]=='\r')        /* \b = 退格键(backspace)*/
				break;					/* \r = 回车键(carrige return)*/
			else if(Getskey[i]=='\b')
			{
				if(i==0)
					continue;
				printf("\b");
				printf(" ");
				printf("\b");
				i--;
			}
			else
			{
				printf("*");
				i++;
			}
		}
		Getskey[i]='\0';
		if(strcmp(user, getuser) == 0 && strcmp(Code, Getskey) == 0){
			printf("\n\n\n\t\t\t密码正确,请稍等");
			printf(".");
			Sleep(300);
			printf(".");
			Sleep(300);
			printf(".");
			Sleep(300);
			printf(".");
			Sleep(300);
			printf(".");
			Sleep(300);
			printf(".");
			Sleep(300);
			return 1;
		}
			
		else
		{
			printf("\n\n\t\t\t账号不存在或密码输入错误,请重新输入\n");
			i = 0;
		}
	}
}

/**管理员菜单*/ 
void AdministratorMenu()                                                
{
	system("cls");//清屏 
	printf("\n\n\n\n\n");
	printf("\t************************************************************\n");
    printf("\t*                                                          *\n");
    printf("\t*                 欢迎来到图书信息管理系统                 *\n");
    printf("\t*                                                          *\n");
    printf("\t*                                                          *\n");
	printf("\t*                          主菜单                          *\n");
	printf("\t*                                                          *\n");
	printf("\t*                     1.录入图书信息                       *\n");
    printf("\t*                                                          *\n");
	printf("\t*                     2.删除图书信息                       *\n");          
	printf("\t*                                                          *\n");
	printf("\t*                     3.修改图书信息                       *\n");
	printf("\t*                                                          *\n");
	printf("\t*                     4.查询图书信息                       *\n");
	printf("\t*                                                          *\n");
	printf("\t*                     5.显示所有图书信息                   *\n");        
    printf("\t*                                                          *\n");
    printf("\t*                     6.全部图书的总价值                   *\n");
    printf("\t*                                                          *\n");
    printf("\t*                     7.返回登录界面                       *\n");
    printf("\t*                                                          *\n");
	printf("\t*                     8.保存数据并退出系统                 *\n"); 
    printf("\t*                                                          *\n");
    printf("\t************************************************************\n\n");
}


/**游客菜单*/ 
void VisitorMenu()                                                 
{
	system("cls");
	printf("\n\n\n\n\n");
	printf("\t************************************************************\n");
   	printf("\t*                                                          *\n");
   	printf("\t*                 欢迎来到图书信息管理系统                 *\n");
   	printf("\t*                                                          *\n");
   	printf("\t*                                                          *\n");
	printf("\t*                          主菜单                          *\n");
	printf("\t*                                                          *\n");
	printf("\t*                     1.查询图书信息                       *\n");
	printf("\t*                                                          *\n");
	printf("\t*                     2.显示所有图书信息                   *\n");        
   	printf("\t*                                                          *\n");
   	printf("\t*                     3.返回登录界面                       *\n");
   	printf("\t*                                                          *\n");
	printf("\t*                     4.退出系统                           *\n"); 
   	printf("\t*                                                          *\n");
   	printf("\t************************************************************\n\n");
}

/*将数据保存到文件中*/ 
void SaveBooksdata(BooksManage head)                                    
{
	BooksManage p;
	FILE *fp;
	fp = fopen("BooksDatabase.txt","w");
	p = head->next;
	while(p->next != NULL){
		fprintf(fp,"%s\t",p->ISBN);
		fprintf(fp,"%s\t",p->bookName);         
		fprintf(fp,"%s\t",p->subject);          
		fprintf(fp,"%s\t",p->editor);
		fprintf(fp,"%.2f\t",p->price);
		fprintf(fp,"%s\t",p->publish);
		fprintf(fp,"%s\t",p->date);
		fprintf(fp,"%d\n",p->num);
	    p=p->next;                
	}
	if(p->next == NULL){
		fprintf(fp,"%s\t",p->ISBN);
		fprintf(fp,"%s\t",p->bookName);         
		fprintf(fp,"%s\t",p->subject);          
		fprintf(fp,"%s\t",p->editor);
		fprintf(fp,"%.2f\t",p->price);
		fprintf(fp,"%s\t",p->publish);
		fprintf(fp,"%s\t",p->date);
		fprintf(fp,"%d",p->num);
	}	
	fclose(fp);
	return ;
}


/**将数据从文件中读取*/  
void ReadBooksdata(BooksManage *head)                                   
{
        int n;
    BooksManage s, p;
    FILE *fp;
    
    fp=fopen("BooksDatabase.txt","r");

    if(NULL == fp) { 
        head = NULL; 
        return ;
    } 
     
    *head = (BooksManage)calloc(1, sizeof(Book));
    p = *head; 
     
 	 while (!feof(fp))
	{
        s = (BooksManage)calloc(1, sizeof(Book));
		fscanf(fp,"%s",s->ISBN);	            	/*为下个结点分配内存空间 */
		fscanf(fp,"%s",s->bookName);
		fscanf(fp,"%s",s->subject);
		fscanf(fp,"%s",s->editor);
		fscanf(fp,"%f",&s->price);
		fscanf(fp,"%s",s->publish);
		fscanf(fp,"%s",s->date);
		fscanf(fp,"%d",&s->num);
		p->next=s;   /*保存该结点*/
		p=p->next;   /*切换到下一个结点*/
		p->next=NULL; /*保证最后一个结点为NULL*/
	}
     
    fclose(fp);/*关闭文件 */
    return ; 
}

/**字体颜色*/ 
void color(short x)
{
    if(x>=0 && x<=15)
    	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), x);
    else
    	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);
}

/**添加图书信息*/ 
void AddBooks(BooksManage *head)                                   
{
	int i;
	BooksManage p, s;
	system("cls");
	if(*head == NULL) {
        *head = (BooksManage)calloc(1,sizeof(Book));
        p = *head;
    } else {                            
        p = *head;
        while(p->next) 
        p = p->next; 
    }
    printf("\n\n\n");
	printf("\t※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
    printf("\t\t\t请问添加几本书:"); 
    scanf("%d",&i);
    printf("\t--------------------------------------------------------\n");
    while(i)
    {
    	s = (BooksManage)calloc(1,sizeof(Book));
    	printf("\t\t\t请输入ISBN号:");
		scanf("%s",s->ISBN);
		printf("\t--------------------------------------------------------\n");
		printf("\t\t\t请输入书名:");
		scanf("%s",s->bookName);
		printf("\t--------------------------------------------------------\n");
		printf("\t\t\t请输入书本的所属学科:");
		scanf("%s",s->subject);
		printf("\t--------------------------------------------------------\n");
		printf("\t\t\t请输入主编:");
		scanf("%s",s->editor);
		printf("\t--------------------------------------------------------\n");
		printf("\t\t\t请输入价格:");
		scanf("%f",&s->price);
		printf("\t--------------------------------------------------------\n");
		printf("\t\t\t请输入出版社:");
		scanf("%s",s->publish);
		printf("\t--------------------------------------------------------\n");
		printf("\t\t\t请输入出版日期:");
		scanf("%s",s->date);
		printf("\t--------------------------------------------------------\n");
		printf("\t\t\t请输入数量:");
		scanf("%d",&s->num);
		printf("\t--------------------------------------------------------\n");
		printf("\n");
		printf("\t--------------------------------------------------------\n");
		i--;
			
		p->next = s;    /*保存输进去的这个结点*/
		p = p->next;    /*切换到下一个结点*/ 
		p->next = NULL; /*最后一个结点为NULL*/
	}
	        
    printf("\t\t\t图书添加成功!!!\n");
	system("pause");
}

/*按所属学科删除图书信息*/ 
void DelBooks_Subject(BooksManage head)                                     
{
	system("cls");
	int flag=0;
	char name[100],ch[10];
	BooksManage p, t;
	
	/**如果表头为空 */
    if(head == NULL || head->next == NULL) {
        printf("没有记录图书信息!\n");
        system("pause");
        return;
    }
	
	p = head;
	printf("\n\n\n");
    printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
	printf("请输入要删除的学科名字;");
	scanf("%s",&name);
	printf("------------------------------------------------------------------------------------\n");
	printf("ISBN\t书名\t所属学科\t主编\t价格\t出版单位\t出版时间\t数量\n");   
	printf("------------------------------------------------------------------------------------\n");                                                                                                                                    
	while(p->next)
	{
		t=p;
		p=p->next;                                               /*转换到下一个结点*/
	    if(strcmp(name,p->subject)==0)
	    {
	    	flag=1;
	        printf("%s\t%s\t%s\t\t%s\t%.2f\t%s\t\t%s\t%d\n",p->ISBN,p->bookName,p->subject,p->editor,p->price,p->publish,p->date,p->num);
	        break;
		}
	}
	 
	if(flag==1)
	{
		printf("是否删除该本图书信息(y/n)");
		scanf("%s",ch);
		printf("----------------------------------------------------------------------\n");
		if(strcmp(ch,"Y") == 0 || strcmp(ch,"y") == 0)
		{
			t->next = p->next;
			free(p);
			printf("该书已删除!\n");
		}
		else
		    return;
	}
	else if(flag == 0)
	    printf("没找到那本书!\n");
	
	system("pause");
}

/*按ISBN删除图书信息*/ 
void DelBooks_ISBN(BooksManage head)                                     
{
	system("cls");
	int flag=0;
	char ch[10];
	char ISBN[N];
	BooksManage p, t;
	
	/**如果表头为空 */
    if(head == NULL || head->next == NULL) {
        printf("没有记录图书信息!\n");
        system("pause");
        return;
    }
	
	p = head;
	printf("\n\n\n");
    printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
	printf("请输入要删除图书的ISBN号;");
	scanf("%s",ISBN);
	printf("------------------------------------------------------------------------------------\n");
	printf("ISBN\t书名\t所属学科\t主编\t价格\t出版单位\t出版时间\t数量\n");   
	printf("------------------------------------------------------------------------------------\n");                                                                                                                                   
	while(p->next)
	{
		t=p;
		p=p->next;                                               /*转换到下一个结点*/
	    if(strcmp(ISBN,p->ISBN)==0)
	    {
	    	flag=1;
	        printf("%s\t%s\t%s\t\t%s\t%.2f\t%s\t\t%s\t%d\n",p->ISBN,p->bookName,p->subject,p->editor,p->price,p->publish,p->date,p->num);
	        break;
		}
	}
	 
	if(flag==1)
	{
		printf("是否删除该本图书信息(y/n)");
		scanf("%s",ch);
		printf("----------------------------------------------------------------------\n");
		if(strcmp(ch,"Y") == 0 || strcmp(ch,"y") == 0)
		{
			t->next = p->next;
			free(p); 
			printf("该书已删除!\n");
		}
		else
		    return;
	}
	else if(flag == 0)
	    printf("没找到那本书!\n");
	
	system("pause");
}

/*修改图书信息*/ 
void ModifyBooks(BooksManage head)                                     
{
	system("cls");
	int flag=0;
	char name[100],ch[5];
	BooksManage p, t;
	
	/* 如果表头为空 */
    if(head == NULL || head->next == NULL) {
        printf("没有记录图书信息!\n");
        system("pause");
        return ;
    }
	
	p = head;
	
	printf("\n\n\n");
	printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
	printf("请输入要修改的书名:");
	scanf("%s",name);
	printf("--------------------------------------------------------------------\n");
 
	while(p->next)
	{
		p=p->next;                 /*切换到下一个结点*/
	    if(strcmp(name,p->bookName)==0)
	    {
	    	flag = 1;
	    	t = p;
			printf("ISBN\t书名\t所属学科\t主编\t价格\t出版单位\t出版时间\t数量\n");   
			printf("------------------------------------------------------------------------------------\n");
	    	printf("%s\t%s\t%s\t\t%s\t%.2f\t%s\t\t%s\t%d\n",p->ISBN,p->bookName,p->subject,p->editor,p->price,p->publish,p->date,p->num);
		}
	}
	
	if(flag==1)
	{
		printf("--------------------------------------------------------------------\n");
		printf("\t\t是否修改该本图书信息(y/n):");
		scanf("%s",ch);
		printf("\t--------------------------------------------------------------------\n");
		if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)
		{
			int c;
			printf("\t\t【1】ISBN号\n");
			printf("--------------------------------------------------------------------\n");
			printf("\t\t【2】书名\n");
			printf("--------------------------------------------------------------------\n");
			printf("\t\t【3】所属学科\n");
			printf("--------------------------------------------------------------------\n");
			printf("\t\t【4】主编\n");
			printf("--------------------------------------------------------------------\n");
			printf("\t\t【5】价格\n");
			printf("--------------------------------------------------------------------\n");
			printf("\t\t【6】出版社\n");
			printf("--------------------------------------------------------------------\n");
			printf("\t\t【7】出版日期\n");
			printf("--------------------------------------------------------------------\n");
			printf("\t\t【8】数量\n");
			printf("--------------------------------------------------------------------\n");
			printf("\t请输入你要修改的内容;");
			scanf("%d",&c);
			printf("--------------------------------------------------------------------\n");
			p = t;
			switch(c)
			{
				case 1:
				    printf("\t请输入ISBN号:");
			        scanf("%s",p->ISBN);
			        break;
			    case 2:
			        printf("\t请输入书名:");
			        scanf("%s",p->bookName);
			        break;
			    case 3:
			        printf("\t请输入所属学科:");
			        scanf("%s",p->subject);
			        break;
			    case 4:
			        printf("\t请输入主编:");
			        scanf("%s",p->editor);
			        break;
			    case 5:
			        printf("\t请输入价格:");
			        scanf("%f",&p->price);
			        break;
			    case 6:
			        printf("\t请输入出版社:");
			        scanf("%s",p->publish);
			        break;
			    case 7:
			        printf("\t请输入出版日期:");
			        scanf("%s",p->date);
			        break;
			    case 8:
			        printf("\t请输入数量:");
			        scanf("%d",&p->num);
			        break;
			}
			printf("--------------------------------------------------------------------\n");
		    printf("\t修改成功!!!\n");
		}
	}
	
	else if(flag == 0)
	    printf("对不起,该书库没有该书\n");
	    system("pause");
}

/**显示所有图书信息*/ 
void PrintBooks(BooksManage head)                                               
{
	BooksManage p;
	system("cls");
	
	/**如果表头为空 */
    if(head == NULL || head->next == NULL) {
        printf("没有记录图书信息!\n");
        system("pause");//提示任意键继续 
        return ;
    }
	
    p = head->next;
    printf("\n\n\n");
    printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
    printf("                                  图书列表\n");
    printf("------------------------------------------------------------------------------------\n");
	printf("ISBN\t书名\t所属学科\t主编\t价格\t出版单位\t出版时间\t数量\n");   
	printf("------------------------------------------------------------------------------------\n");
    
	do
	{
	    printf("%s\t%s\t%s\t\t%s\t%.2f\t%s\t\t%s\t%d\n",p->ISBN,p->bookName,p->subject,p->editor,p->price,p->publish,p->date,p->num);
	    p = p->next;                           
	}while(p!=NULL);
	
	system("pause");
}

/**求全部图书价值*/
void SumBooks(BooksManage head){
	float sum = 0;
	system("cls");
	BooksManage p;
	/* 如果表头为空 */
    if(head == NULL || head->next == NULL) {
        printf("\t\t\t\t没有图书信息!\n");
        return;
    }
        for(p = head;p != NULL; p = p->next){
        	sum += p->price * p->num;
		}
	printf("\n\n\n\n\n\n");	
   printf("\t\t\t***********************************\n");
   color(12);printf("\t\t\t*    全部图书的总价值为:%.2f     *\n",sum);
   color(10);printf("\t\t\t***********************************\n");
	system("pause");
} 

/*查询图书信息*/ 
void FindBooks(BooksManage head)                                     
{
	system("cls");
	int choose,flag = 0;
	BooksManage p;
	char b[100];
	char ISBN[N];
	
	/* 如果表头为空 */
    if(head == NULL || head->next == NULL) {
        printf("没有记录图书信息!\n");
        system("pause");
        return ;
    }
    
    do
	{
		system("cls");
		printf("\n\n\n");
		printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
		printf("\t\t1.按书名查找\n");
		printf("----------------------------------------------------------------------\n");
		printf("\t\t2.按ISBN号查找\n");
		printf("----------------------------------------------------------------------\n");
		printf("\t\t返回主菜单(其他数字)\n");
		printf("----------------------------------------------------------------------\n");
		printf("\t\t请输入您的选择:");
		scanf("%d",&choose);
		printf("----------------------------------------------------------------------\n");
		p=head;
		
		if(choose == 1)
		{
			printf("输入所查书名:");
			scanf("%s",b);
			printf("----------------------------------------------------------------------\n\n");
			while(p->next)
			{
				p=p->next;                           /*转换到下一个结点*/
				if(strcmp(b,p->bookName)==0)         /*判断是否找到并输出*/
			    {
				     flag=1;
				     printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
					 printf("ISBN\t书名\t所属学科\t主编\t价格\t出版单位\t出版时间\t数量\n");
      			  	 printf("------------------------------------------------------------------------------------\n");
				     printf("%s\t%s\t%s\t\t%s\t%.2f\t%s\t\t%s\t%d\n",p->ISBN,p->bookName,p->subject,p->editor,p->price,p->publish,p->date,p->num);
			    }
			}
			if(flag==0)
			         printf("不存在该信息\n");
		}
		
		else if(choose==2)
		{
			printf("输入所查ISBN号:");
			scanf("%s",ISBN);
			printf("----------------------------------------------------------------------\n\n");
			while(p->next)
			{
				p=p->next;                         /*转换到下一个结点*/
				if(strcmp(p->ISBN,ISBN) == 0)         /*判断是否找到并输出*/
				{
					flag=1;
				   printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
	                printf("ISBN\t书名\t所属学科\t主编\t价格\t出版单位\t出版时间\t数量\n");
	               printf("------------------------------------------------------------------------------------\n");
				    printf("%s\t%s\t%s\t\t%s\t%.2f\t%s\t\t%s\t%d\n",p->ISBN,p->bookName,p->subject,p->editor,p->price,p->publish,p->date,p->num);
				}
			}
			if(flag == 0)
			        printf("不存在该信息\n");
		}
		else
		    return;
		system("pause");
	}while(1);
}
一、 课程设计的基本要求 利用《数据结构》课程的相关知识完成一个具有一定难度的综合设计题目,利用C/C++语言进行程序设计,并规范地完成课程设计报告。通过课程设计,巩固和加深对线性表、栈、队列、字符串、树、图、查找、排序等理论知识的理解;掌握现实复杂问题的分析建模和解决方法(包括问题描述、系统分析、设计建模、代码实现、结果分析等);提高利用计算机分析解决综合性实际问题的基本能力。 具体要求如下: 1、 对现实复杂问题的数据对象特性及组织方法进行分析和研究,设计适当的数据逻辑结构、存贮结构以及相应运算操作,把现实世界问题建模转化为计算机内部表示并进行处理。 2、 采取模块化方式进行程序设计,要求程序的功能设计、数据结构设计及整体结构设计合理。学生也可根据自己对题目的理解增加新的功能模块(视情况可另外加分)。 3、 系统以菜单界面方式(至少采用文本菜单界面,如能采用图形菜单界面更好)工作,运行界面友好,演示程序以用户和计算机的对话方式进行,利用文件进行数据的提取与存储。 4、 程序算法说明清晰,理论分析与计算正确,运行情况良好,实验测试数据无误,容错性强(能对错误输入进行判断控制)。 5、 编程风格良好(包括缩进、空行、适当注释、变量名和函数名见名知意,程序容易阅读等); 6、 写出规范的课程设计报告,具体要求见相关说明文档。 二、 课程设计的主要内容 [问题描述] 英文图书管理系统主要包括增加图书查询图书、删除图书图书借阅、还书、按照书号进行排序和统计当前借出和借入情况几个模块。 [基本要求]   要求数据结构用链表的形式,并能利用文件进行数据的提取与存储。 [测试数据]
具体功能要求 1、图书维护 (1)设置管理员账号和密码; (2)图书信息录入:图书编号、书名、作者名、分类、图书数量; (3)图书信息更改; (4)图书信息删除; (5)图书信息查询:按图书编号查询、按书名查询、按作者名查询; (6)图书信息全部显示; (7)图书信息全部删除; (8)退出图书维护界面。 2、读者维护 (1)设置管理员账号和密码; (2)读者信息录入:读者姓名、学号; (3)读者信息更改; (4)读者信息删除; (5)读者信息查询:按读者编号查询、按读者姓名查询; (6)读者信息全部显示; (7)读者信息全部删除; (8)退出读者维护界面。 3、借书 (1)设置借书的范围(如5本); (2)图书数量随着借书的数量减少; (3)输入读者编号与图书编号后借书成功。 4、还书 (1)图书数量随着还书的数量增加; (2)输入读者编号与图书编号后还书成功。 5、添加功能 (1)添加一本图书的基本信息,包括书名、图书编号、作者名、类别、图书数量。 (2)添加读者信息: 添加图书借阅的基本信息,包括书名、学号。 6、更改功能 对图书和读者的信息进行修改。 7、查找功能 (1)图书信息查找; (2)读者信息查找。 8、显示功能 (1)显示所有图书信息; (2)显示所有借阅信息。 9、删除功能 (1)删除图书的基本信息; (2)删除读者的基本信息; (3)删除图书借阅基本信息
图书管理系统其实是一个很复杂的信息管理系统,它包括很多分类、检索等方面的内容。因为其复杂性,建立这样一个系统更加能体现出运用SQL Server数据库进行数据处理的优越性。本课题将实现一个简化的图书管理系统的功能。 1.系统功能设计 (1)信息录入功能 1)添加新图书信息。当图书馆收藏新图书时,系统向用户提供新图书信息录入功能,由于同一种书可能会有多本,因此,新图书信息有两类:某一个ISBN类别的图书信息,包括:ISBN书号、图书类别、书名、作者、出版社、出版日期、价格、馆藏数量、可借数量、图书简介;另一个具体到每一本书的信息,包括:ISBN书号、图书书号、是否可借。每一个ISBN书号和同一个ISBN书号的多本书之间是一对多的关系,每一本书的图书书号是唯一的。 2)添加读者信息。用于登记新读者信息。包括:借书证号、姓名、性别、身份证号、职称、可借数量、已借数量、工作部门、联系电话等。 3)借阅信息。用于登记读者的借阅情况信息。包括:借书证号、借阅书号、借出日期、借阅期限、归还日期等信息。归还日期为空值表示该图书未归还。 (2)数据修改和删除功能 1)修改和删除图书信息图书被借出时,系统需要更新图书信息的可借数量,当可借数量为0时,表示该图书都已被借出。当输入的图书信息有错误或需要进行必要更新时,可以修改图书信息;当一种图书所有馆藏图书都已损毁或遗失并且不能重新买到时,该图书信息需要删除。 2)修改和删除读者信息。当读者的自身信息发生变动,如部门间调动或调离本单位,或违反图书馆规定需要限制其可借阅图书数量时,需要修改读者信息。 3)还书处理。读者归还图书时,更新图书借阅信息的归还日期,读者信息的已借数量及ISBN类别信息图书的可借数量。 (3)查询和统计功能 1)图书查询功能。根据图书的各种已知条件来查询图书的详细信息,如书名、作者、出版社、ISBN书号等支持模糊查询。 2)读者信息查询。输入读者的借书证号、姓名、工作部门等信息查询读者的基本信息。对查询到的每一个读者,能够显示其未归还的图书编号和书名。 3)查询所有到期未归还的图书信息。要求结果显示图书编号、书名、读者姓名、借书证号码、借出日期等信息。 4)统计指定读者一段时间内的某类图书或所有类别图书借阅次数及借阅总次数。 2.数据表的创建 根据功能要求的说明创建下列数据表: (1)图书ISBN类别信息图书ISBN类别信息表包括以下字段: ISBN书号、图书类别、书名、作者、出版社、出版日期、价格、馆藏数量、可借数量、图书简介。 (2)图书信息图书信息表包括以下字段: ISBN书号、图书书号、是否可借。 (3)读者信息表 读者信息表包括以下字段: 借书证号、姓名、性别、出生年月、身份证号、职称、可借数量、已借数量、工作部门、家庭地址、联系电话。 (4)借阅信息表(图书-读者关系) 借阅信息表包括以下字段: 借书证号、借阅书号、借出日期、借阅期限、归还日期。 3.数据库完整性设计 设计者应认真分析和思考各个表之间的关系,合理设计和实施数据完整性原则。 1) 给每个表实施主键及外键约束。 2) 设定缺省约束。如性别。 3) 设置非空约束如图书信息的书名。 4) 实施CHECK约束。如ISBN类别表的可借数量小于馆藏数量。 5) 实施规则。如身份证号码必须为15为或18位。 4.SQL Server数据库对象设计 1)设计一个存储过程,以图书编号为输入参数,返回借阅该图书但未归还的读者姓名和借书证号。 2)读者资料查询:设计一个有多个输入参数的存储过程,返回读者的详细信息。设计另一存储过程并以读者借书证号为输入参数,返回该读者未归还的图书名称和图书编号。 3)到期图书查询:设计一个视图,返回所有逾期未归还的图书的编号、书名、读者姓名等信息。 4)统计图书借阅次数:设计一个以两个日期作为输入参数的存储过程,计算这一段时间内各类别图书被借阅的次数,返回图书类别、借阅次数的信息。 5)加快数据检索速度,用图书编号为图书信息表建立索引。 6)为读者信息表创建一个删除触发器,当一个读者调出本单位时,将此读者的资料从读者信息删除。注意实施业务规则:有借阅书的读者不得从读者信息删除。 7)借阅处理:为借阅信息表设计INSERT触发器,在读者借阅时更改ISBN类别信息表,且可借数量减1,图书信息表是否可借列的值变为“不可借”,读者信息该类读者已借阅数加1。 8)还书处理:为借阅信息表设计UPDATE触发器,在该表的归还日期列被更改后,将图书信息表的是否可借列的值变为“可借”,读者信息已借数量减1及ISBN类别信息可借数量加1。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值