C语言课设代码补充---图书馆书籍管理

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<ctype.h>

typedef struct          //定义数据类型
{
	char ISBN[10];      //书号
	char book[30];      //书名
	char author[20];    //作者
	int edition;        //版本号
	char press[50];     //出版社名
	int year;           //年份
}Bookinfo;

int Input(Bookinfo dictList[],int n)       // 从键盘输入若干条记录,依次存放到结构体数组dictList中,返回最后的记录数
{
	int m,i;                               //m:要输入的本数,i循环控制量

	printf("请输入要输入图书的本数\n");
	scanf("%d",&m);
	getchar();
	printf("\n");
	for(i=0;i<m;i++)
	{
		printf("请输入第%d本:\n",i+1);
		printf("书号:");
		gets(dictList[n+i].ISBN);
		printf("书名:");
		gets(dictList[n+i].book);
		printf("作者:");
		gets(dictList[n+i].author);
		printf("版本号:");
		scanf("%d",&dictList[n+i].edition);
		getchar();
		printf("出版社名:");
		gets(dictList[n+i].press);
		printf("出版年份:");
		scanf("%d",&dictList[n+i].year);
		getchar();
		printf("\n");
	}
	printf("输入完毕!请继续:");
	return (n+m);           //返回总的图书本数
}

void Display(Bookinfo dictList[],int n)        //显示所有图书信息,每10本暂停一次
{
	int i,js=1;                                //js:计数,统计已经输出的本数
	char zt;

	printf("书号          书名    作者            版本号     出版社      出版年份\n");
	printf("---------------------------------------------------------------------\n");
	printf("\n");
	for(i=0;i<n;i++,js++)
	{
		printf("%-8s",dictList[i].ISBN);
		printf("%-15s",dictList[i].book);
		printf("%-13s",dictList[i].author);
		printf("第%3d版     ",dictList[i].edition);
		printf("%-14s",dictList[i].press);
		printf("%d\n",dictList[i].year);
		if((++js)%10==0)                       //每输出十本换行
		{
			printf("任意键,继续输出");
			zt=getchar();
		}
	}
	printf("输出完毕!请继续:");
}

int Delete(Bookinfo dictList[],int n,char *book) //删除某一本书
{
	int i,j,t;
	char del[10],c,*zj;  //del删除的目标书号

	printf("请选择书号:");
	gets(del);
	for(i=0;i<n;i++)
	{
		for(j=0,zj=book;j<30 && dictList[i].book[j]!='\0';j++,zj++)    
		{
			if(dictList[i].book[j]==*zj) t=1;
			else {t=0;j=30;}
		}
		if(t==1)
		{
			for(j=0;j<10 && dictList[i].ISBN[j]!='\0';j++)
			{
				if(dictList[i].ISBN[j]==del[j]) t=1;
				else {t=0;j=10;}
			}
			printf("确定删除,请按回车键!");
			c=getchar();
			if(c!='\n') t=0;
			if(t==1)
			{
				for(;i<n-1;i++)
				{
					dictList[i]=dictList[i+1];
				}
			}
		}
	}
	printf("成功删除");
	return n-1;
}

int Delete_a_record(Bookinfo dictList[],int n)
{
	int i,t,p;
	char sm[30],*book; //sm:书名,待删除书名

	printf("请输入待删除书本的名字:");
	getchar();
	gets(sm);
	book=&sm[0];
	for(i=0;i<n;i++)
	{
		for(p=0;p<30 && dictList[i].book[p]!='\0';p++)
		{
			if(dictList[i].book[p]==sm[p]) t=1;
			else {t=0;p=30;}
		}
		if(t==1)
		{
			printf("书号    书名\n");
	        printf("____________\n");
			printf("%-8s",dictList[i].ISBN);
		    printf("%-8s\n",dictList[i].book);
		}
	}
	n=Delete(dictList,n,book);
	return n;
}

void Sort_by_name(Bookinfo dictList[],int n)      //数组按书名升序排列
{
		int i,j,p,bj;
		Bookinfo ls;

	for(i=0;i<n-1;i++)
	{
		p=i;
		for(j=i+1;j<n;j++)
		{
			bj=strcmp(dictList[i].book,dictList[j].book);
			if(bj>0) p=j;
		}
		if(p!=i)
		{
			ls=dictList[i];
			dictList[i]=dictList[p];
			dictList[p]=ls;
		}
	}
	printf("排序完成\n");
}

int Insert(Bookinfo dictList[],int n,Bookinfo *s) //有序插入
{
	int i,j,p;

	for(i=0;i<=n;i++)
	{
		p=strcmp(dictList[i].book,(*s).book);
		if(i=n)
		{
			dictList[i]=*s;
			i=n+1;
			j=n+1;
		}
		if(p>0)                               
		{
			for(j=n;j>i;j--) dictList[j]=dictList[j-1];
			dictList[i]=*s;
			i=n+1;
		}
        
	}
	return(n+1);
}

int Insert_a_record(Bookinfo dictList[ ],int n)  //有序插入
{
	Bookinfo mmp,*s;
	s=&mmp;
	getchar();
	printf("书号:");
	gets(mmp.ISBN);
	printf("书名:");
	gets(mmp.book);
	printf("作者:");
	gets(mmp.author);
	printf("版本号:");
	scanf("%d",&mmp.edition);
	getchar();
	printf("出版社名:");
	gets(mmp.press);
	printf("出版年份:");
	scanf("%d",&mmp.year);
	getchar();
	n=Insert(dictList,n,s);
	Sort_by_name(dictList,n);
	printf("插入成功"); 
	return n;
}



int Query(Bookinfo dictList[],int n,Bookinfo *book)       //查找并显示书名为book的所有记录,查找成功返回该书记录个数,失败则返回-1
{
	int i,p,t,m=0;

	for(i=0;i<n;i++)
	{
		for(p=0;p<30 && dictList[i].book[p]!='\0';p++)
		{
			if(dictList[i].book[p]==(*book).book[p]) t=1;
			else {t=0;p=30;}
		}
		
		if(t==1)
		{
			printf("书号    书名    作者     版本号     出版社 出版年\n");
	        printf("__________________________________________________\n");
			printf("%-8s",dictList[i].ISBN);
		    printf("%-8s",dictList[i].book);
		    printf("%-8s",dictList[i].author);
		    printf("第%3d版     ",dictList[i].edition);
		    printf("%-8s",dictList[i].press);
		    printf("%d\n",dictList[i].year);
			m=m+1;
		}
	}
	return m;
}

void Query_a_record(Bookinfo dictList[],int n)         //输入待查书名
{
	Bookinfo cz,*czz;
	int a,i;

	czz=&cz;
	printf("请输入要查找的书名:");
	getchar();
	gets(cz.book);
	a=Query(dictList,n,czz);
	if(a>0)
		printf("找到了%d本名为%s的书!",a,cz.book);
	else
		printf("没有找到名称为%s的书",cz.book);
}

void WritetoText(Bookinfo dictList[],int n,char *filename)         //将记录写到文件里
{
	int i;
	FILE *fp;

	fp=fopen(filename,"w");
	if(fp==NULL)
	{
		printf("不能打开文件\n");
		exit(1);
	}
	fprintf(fp,"%d\n",n);
	fprintf(fp,"书号          书名    作者     版本号     出版社      出版年份\n");
	fprintf(fp,"--------------------------------------------------------------\n");
	for(i=0;i<n;i++)
	{
		fprintf(fp,"%-8s",dictList[i].ISBN);
		fprintf(fp,"%-15s",dictList[i].book);
		fprintf(fp,"%-8s",dictList[i].author);
		fprintf(fp,"第%3d版     ",dictList[i].edition);
		fprintf(fp,"%-15s",dictList[i].press);
		fprintf(fp,"%d\n",dictList[i].year);
	}
	printf("成功记录到文件!");
}

int AddfromText(Bookinfo dictList[],int n,char *filename)   //从文件中导入数据
{
	int i;

    Bookinfo s;
	FILE *p;
    system("cls");
    p=fopen(filename,"r");
    fscanf(p,"%d",&i);
    while(i--)
    {
        fscanf(p,"%s%s%s%d%s%d\n",s.ISBN,s.book,s.author,&s.edition,s.press,&s.year);
        n=Insert(dictList,n,&s);                          
    }
    fclose(p);
    printf("成功输入\n");
    return(n);                
}

void Display_main_menu()                    //显示主菜单
{
		system("cls");                      //清屏
	    printf("                    Menu\n");
	    printf("_____________________________________\n");
	    printf("1.  Input Records\n");
	    printf("2.  Display All Records\n");
	    printf("3.  Delete A Recrod\n");
	    printf("4.  Sort\n");
	    printf("5.  Insort A Record\n");
	    printf("6.  Query\n");
	    printf("7.  Add Rrcords From A Text File\n");
	    printf("8.  Write To A Text File\n");
		printf("9.  Correct a record\n");
	    printf("0.  Quit\n");
		printf("______________________________________\n");
	    printf("Give Your Choice:");
}

void Correct(Bookinfo dictList[],int n)   //显示所有记录,并对其中某一个进行修改
{
	char xg[30];
	int i,bj,m;
	
	Display(dictList,n);
	system("pause");
	printf("请输入所要修改图书记录的书号:\n");
	scanf("%s",xg);
	for(i=0;i<n;i++)
	{
		bj=strcmp(dictList[i].ISBN,xg);
		if(bj==0)  break;
	}
	
	printf("所要修改对象信息如下:\n");
	printf("书号          书名    作者     版本号     出版社      出版年份\n");
	printf("--------------------------------------------------------------\n");
	printf("%-7s",dictList[i].ISBN);
	printf("%-16s",dictList[i].book);
	printf("%-8s",dictList[i].author);
	printf("第%3d版     ",dictList[i].edition);
	printf("%-14s",dictList[i].press);
	printf("%d\n",dictList[i].year);
	printf("请输入所要修改对内容的序号\n");
	printf("1.书号\n2.书名\n3.作者4.版本号\n5.出版社\n6.出版年份\n");
	scanf("%d",&m);
	switch (m)
	{
	case 1:    
		{
			printf("书号:");
			scanf("%s",dictList[i].ISBN);
			break;
		}
	case 2:    
		{
			printf("书名:");
			scanf("%s",dictList[i].book);
			break;
		}
	case 3:    
		{
			printf("作者:");
			scanf("%s",dictList[i].author);
			break;
		}
	case 4:    
		{
			printf("版本号:");
		    scanf("%d",&dictList[i].edition);
		    getchar();
			break;
		}
	case 5:    
		{
			printf("出版社:");
			scanf("%s",dictList[i].press);
			break;
		}
	case 6:    
		{
			printf("出版年份:");
		    scanf("%d",&dictList[i].year);
		    getchar();
			break;
		}
	}
	
}

void main()
{
	int n=0;
	char i;
	Bookinfo dictList[50];

	for(;;)
	{
		Display_main_menu();
		scanf("%c",&i);
		switch(i-'0')
		{
		case 1:
			{
				n=Input(dictList,n);
				system("pause");
				break;
			}
		case 2:
			{
				Display(dictList,n);
				system("pause");
				break;
			}
		case 3:
			{
				n=Delete_a_record(dictList,n);
				system("pause");
				break;
			}
		case 4:
			{
				Sort_by_name(dictList,n);
				system("pause");
				break;
			}
		case 5:
			{
				n=Insert_a_record(dictList,n);
				system("pause");
				break;
			}
		case 6:
			{
				Query_a_record(dictList,n);
				system("pause");
				break;
			}
		case 7:
			{
				char *filename,s[30];
				printf("请输入文件名\n");
				scanf("%s",s);
				filename=s;
				n=AddfromText(dictList,n,filename);
				system("pause");
				break;
			}
		case 8:
			{
				char *filename,s[30];
				printf("请输入文件名\n");
				scanf("%s",s);
				filename=s;
				WritetoText(dictList,n,filename);
				system("pause");
				break;
			}
		case 9:
			{
				Correct(dictList,n);
				system("pause");
				break;
			}
		case 0:
			{
				printf("Goodbye!\n");
				system("pause");
				exit(0);
			}
		}
	}
}

猜你喜欢

转载自blog.csdn.net/zhulinhao/article/details/106920673