createfile.c

来自「很有用的一个图书管理系统方面的源代码!不用改错直接运用」· C语言 代码 · 共 407 行

C
407
字号
//nclude "Struct.c"

//-----------------------------书库全部图书输出//
void print()
{
	int j;
	system("cls");
	printf("以下为库存图书:\n>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<\n");
	for (j = 0 ;j<i ;j ++)
	{
		if (Dbasehead.BookDbase[j].storenum == -1)
			continue;
		printf("书号: %s\n",Dbasehead.BookDbase[j].bno);
		printf("书名: %s\n",Dbasehead.BookDbase[j].bname );
		printf("作者: %s\n",Dbasehead.BookDbase[j].author);
		printf("出版社: %s\n",Dbasehead.BookDbase[j].press);
		printf("此书馆藏: %d本\n",Dbasehead.BookDbase[j].storenum);
		printf("此书可借本数: %d本\n",Dbasehead.BookDbase[j].canborrownum);
		printf(">>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<\n");
	}
}

//----------------------------输出读者信息//
void printauthor()
{
	int j;
	system("cls");
	printf("以下为书库读者:\n>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<\n");
	for (j = 0; j<p ;j++)
	{
		printf("学号: %d\n",File4.ReadRec[j].rno);
		printf("姓名: %s\n",File4.ReadRec[j].name);
		printf("允许借书数: %d\n",File4.ReadRec[j].bn1);
		printf("还剩借书数: %d\n",File4.ReadRec[j].bn2);
		printf(">>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<\n");
	}

}
//----------------------------进行删除操作//
void DelBook(char j[10])
{
	int m,k;
	BookRecType *lhead;
	for (m=0;m<i;m++)          
	{
		if ((k=strcmp(j,IdxFile.BnoIdx[m].bno)) == 0)
			break;
	}
	if (m==i)
	{
		printf("该书不存在!\n");
		goto Exit;
	}
	else
	{
		IdxFile.len--;
		File1.len1--;
		File2.len2--;
		File3.len3--;
		lhead = IdxFile.BnoIdx[m].lhead;
		book[a] = (lhead - Dbasehead.BookDbase)/80;
		lhead->storenum = -1;
		//IdxFile.BnoIdx[m].bno
		a++;
		printf("删除书号为%s完成!\n",j);
	}	
Exit:;
}

//---------------------------追加一条图书主数据库记录//
void AppeDBaseRec( BookDbaseFile  *df )
{
		
}


//---------------------------修改书号索引表//
void ChangeBnoIdxF(int j)
{
	int z =0,m,n;
	strcpy(IdxFile.BnoIdx[i].bno,Dbasehead.BookDbase[i].bno);
	IdxFile.BnoIdx[i].lhead = &Dbasehead.BookDbase[i];
	IdxFile.len = i;
	if ( j > 1 )
	{
		for (;z < j-1; z++)
		{
			if(IdxFile.BnoIdx[ z ].bno[0] <= IdxFile.BnoIdx[ j ].bno[0] && IdxFile.BnoIdx[ j ].bno[0]<= IdxFile.BnoIdx[ z + 1 ].bno[0])
			{
				__asm
				{
					mov ecx,8h
					push ecx
					mov eax,j
					mul ecx
					lea esi,IdxFile
					push esi
					add esi,eax
					mov edi,esi
					add edi,8h
					rep movsb
					pop esi
					pop ecx
					mov ebx,j
					dec ebx
					sub ebx,z
Next:				push esi
					push ecx
					sub eax,8h
					add esi,eax
					mov edi,esi
					add edi,8h
					rep movsb
					pop ecx
					pop esi
					sub ebx,1
					jnz Next
					mov eax,z
					inc eax
					mul ecx
					mov edi,esi
					add edi,eax
					mov eax,j
					inc eax
					mul ecx
					add esi,eax
					rep movsb
				}
			}
			else if (IdxFile.BnoIdx[ 0 ].bno[0] > IdxFile.BnoIdx[ j ].bno[0])
			{
				__asm
				{
					mov ecx,8h
					push ecx
					mov eax,j
					mul ecx				
					lea esi,IdxFile
					push esi
					add esi,eax
					mov edi,esi
					add edi,8h
					rep movsb
					pop esi
					pop ecx
					mov ebx,j
Next1:				push esi
					push ecx
					sub eax,8h
					add esi,eax
					mov edi,esi
					add edi,8h
					rep movsb
					pop ecx
					pop esi
					sub ebx,1
					jnz Next1
					mov edi,esi
					mov eax,j
					inc eax
					mul ecx
					add esi,eax
					rep movsb			
				}
			}
		}
	}
	else if( j==1 )
	{
		if( IdxFile.BnoIdx[ 0 ].bno[0] > IdxFile.BnoIdx[ 1 ].bno[0] )
		{
			__asm
			{
				mov ebx,2
				mov ecx,8h
				push ecx
				lea eax,IdxFile
				push eax
				mov esi,eax
				add eax,10h
				mov edi,eax
				rep movsb
				pop eax
				pop ecx
Next2:			push ecx
				mov edi,eax
				add eax,8h
				mov esi,eax
				rep movsb
				pop ecx
				sub ebx,1
				jnz Next2
			}
		}
	}
	
}

//---------------------------修改书名索引以及书名链头索引表//
void ChangeLinkHeadF1()
{
	int j=0,k,m=0,n=0;
	for (k=0;k<r;k++)          
	{
		m = strcmp(Dbasehead.BookDbase[i].bname,File1.LHFrec1[k].bname);
		if( m==0 )
		{
			File1.LHFrec1[k].RecNum++;
			Dbasehead.BookDbase[i].namenext = File1.LHFrec1[k].lhead ;
			File1.LHFrec1[k].lhead = &Dbasehead.BookDbase[i];
			goto Exit;
		}
	}
	strcpy(File1.LHFrec1[r].bname,Dbasehead.BookDbase[i].bname);
	File1.LHFrec1[r].lhead = &Dbasehead.BookDbase[i];
	File1.LHFrec1[r].RecNum = 1;
	r++;	
Exit: 
	File1.len1++;	
}

//---------------------------修改作者索引以及作者链头索引表//
void ChangeLinkHeadF2()
{
	int j=0,k,m=0,n=0;
	for (k=0;k<s;k++)          
	{
		m = strcmp(Dbasehead.BookDbase[i].author,File2.LHFrec2[k].author);
		if( m==0 )
		{
			File2.LHFrec2[k].RecNum++;
			Dbasehead.BookDbase[i].authnext = File2.LHFrec2[k].lhead ;
			File2.LHFrec2[k].lhead = &Dbasehead.BookDbase[i];
			goto Exit;
		}
	}
	strcpy(File2.LHFrec2[s].author,Dbasehead.BookDbase[i].author);
	File2.LHFrec2[s].lhead = &Dbasehead.BookDbase[i];
	File2.LHFrec2[s].RecNum = 1;
	s++;	
Exit:
	File2.len2++;	
}

//----------------------------修改出版社索引以及出版社链头索引表//
void ChangeLinkHeadF3()
{
	int j=0,k,m=0,n=0;
	for (k=0;k<t;k++)          
	{
		m = strcmp(Dbasehead.BookDbase[i].press,File3.LHFrec3[k].press);
		if( m==0 )
		{
			File3.LHFrec3[k].RecNum++;
			Dbasehead.BookDbase[i].prenext = File3.LHFrec3[k].lhead ;
			File3.LHFrec3[k].lhead = &Dbasehead.BookDbase[i];
			goto Exit;
		}
	}
	strcpy(File3.LHFrec3[t].press,Dbasehead.BookDbase[i].press);
	File3.LHFrec3[t].lhead = &Dbasehead.BookDbase[i];
	File3.LHFrec3[t].RecNum = 1;
	t++;	
Exit:
	File3.len3++;	
}

//-----------------------------建立图书多重表主索引及相关索引链头文件//
void CreateBook()
{
	char del_num[10];
	int x,v,w,u,y,z,m,n,k;
	FILE *fp;
	do
	{
		system("cls");
		printf(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>图书管理菜单<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n");
		printf("  1 - 新书入库\n");
		printf("  2 - 旧书删除\n");
		printf("  3 - 查询库内图书\n");
		printf("  4 - 退出\n");
Exit3:
		printf("\n请输入选择:");
		scanf("%d",&v);
		if (v!=4)
		{
			if(v==1)
			{
Exit1:
				printf("是否进行新书入库操作?1.是2.否\n");
				scanf("%d",&w);
				if(w==1)
				{
					do
					{
						book[a] = i;
						i = book[0];
						printf("请输入新书数据:\n\n");
						printf("请输入书号:");
						scanf("%s",&Dbasehead.BookDbase[i].bno);
						for (x=0 ; x<i; x++)
						{
							if ( (k=strcmp(Dbasehead.BookDbase[i].bno,IdxFile.BnoIdx[x].bno))== 0)
							{
								printf("输入的书号已经存在,请重新输入!\n");
								x = 0;
								printf("请输入书号:");
								scanf("%s",&Dbasehead.BookDbase[i].bno);
							}
						}
						printf("请输入书名:");
						scanf("%s",&Dbasehead.BookDbase[i].bname);
						printf("请输入作者:");
						scanf("%s",&Dbasehead.BookDbase[i].author);
						printf("请输入出版社:");
						scanf("%s",&Dbasehead.BookDbase[i].press);
						for (x = 0; x<i; x++)
						{
							n = strcmp(Dbasehead.BookDbase[x].bname,Dbasehead.BookDbase[i].bname);
							if ( n!=0 )
								break;
							n = strcmp(Dbasehead.BookDbase[x].author,Dbasehead.BookDbase[i].author);
							if ( n!=0 )
								break;
							n = strcmp(Dbasehead.BookDbase[x].press,Dbasehead.BookDbase[i].press);
							if ( n!=0 )
								break;
							Dbasehead.BookDbase[x].storenum++;
							Dbasehead.BookDbase[x].canborrownum++;
							goto Exit;
						}
						ChangeBnoIdxF(i);
						ChangeLinkHeadF1();
						ChangeLinkHeadF2();
						ChangeLinkHeadF3();
						Dbasehead.BookDbase[i].storenum = 1;
						Dbasehead.BookDbase[i].canborrownum = 1;
						if ( i == book[a] )
						{
							i++;
						}
						else
						{
							for (x = 0; x<a; x++)
							{
								book[x]=book[x+1];
							}
							a--;
							i = book[a];
						}		
Exit:	
						printf("是否继续进行新书入库操作?1.是2.否\n");
						scanf("%d",&w);				
					}while(w==1);

				}
				else if (w != 2)
				{
					printf("无效输入,请重新输入!\n");				
					goto Exit1;
				}
			}
			else
			{
				if (v==2)
				{
					printf("是否进行删除操作?1.是2.否\n");
Exit2:
					scanf("%d",&y);
					if(y==1)
					{
						do
						{
							printf("请输入要删除的书号:\n");
							scanf("%s",del_num);
							DelBook(del_num);
							printf("是否继续进行删除操作?1.是2.否\n");
							scanf("%d",&z);
						}while(z==1);
					}
					else if ( y!=2)
					{
						printf("无效输入,请重新输入!\n");
						goto Exit2;
					}
				}
				else if (v==3)
				{
					printf("库内图书资料:\n");
					print();
				}
				else
				{
					printf("无效输入,请重新输入!\n");				
					goto Exit3;
				}

			}
		}
		else
			break;
		printf("是否继续进行书库管理操作?1.是2.否\n");
		scanf("%d",&u);
		}while(u==1);
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?