利用C语言制作图书管理系统

利用C语言制作图书管理系统

#include<stdio.h>
#include<windows.h>
#define LEN sizeof(commdity)
#define FORMAT "%-8d%-15s%-12.1lf%-12.1lf%-12.1lf\n"
#define DATA comm[xunhuanyong].num,comm[xunhuanyong].name,comm[xunhuanyong].price,comm[xunhuanyong].count,comm[xunhuanyong].total

struct commdity/*定义商品信息结构体*/
{ 
    int num;/*编号*/
    char name[30];/*商品名称*/
    double price;/*单价*/
    double count;/*数量*/
    double total;/*总金额*/
}commdity;

struct commdity comm[50];/*定义结构体数组*/

void menu();/*主菜单*/
void in();/*录入商品信息*/
void show();/*显示商品信息*/

void del();/*删除商品信息*/
void modify();/*修改商品息*/
void insert();/*插入商品信息*/
void total();/*计算总商品数*/
void search();/*查找商品信息*/



int main()
{
	int choice=1;
	menu();
	scanf("%d",&choice);
	while(choice)
	{
		switch(choice)
		{
			case 1:in();break;//录入 
//			case 2:search();break;//查找 
//			case 3:del();break;//删除 
//			case 4:modify();break;//修改 
			case 5:insert();break;//插入 
//			case 6:order();break;//排序 
//			case 7:total();show();break;//统计数量 
			getch();
        	menu();   /*执行完功能再次显示菜单界面*/
        	scanf("%d",&choice);
		}
	}
	
	return 0;
}

void insert()/*插入商品信息*/
//{
//	FILE *wenjianzhizhen;
//	int m=0,n,xunhuanyong,k;
//	if((wenjianzhizhen=fopen("data","ab+"))==NULL)
//	{ 
//		printf("不能打开文件!\n");
//		return;
//	}
//	while(!feof(wenjianzhizhen))  
//	{
//		if(fread(&comm[m],LEN,1,wenjianzhizhen)==1)
//		{m++;
//		}
//	}
//	if(m==0) 
//		{
//			printf("没有记录!\n");
//			fclose(wenjianzhizhen);
//			return;
//		}
//		
//	printf("请输入要插入的位置\n");
//	scanf("%d",&n);/*输入要插入的位置*/
//	for(xunhuanyong=m-1;xunhuanyong>=n-1;xunhuanyong--){
//		comm[xunhuanyong+1] = comm[xunhuanyong];
//	}
//	printf("现在输入新的信息.\n");
//	printf("编号:");
//	scanf("%d",&comm[n-1].num);
//	for(k=0;k<m;k++)
//		if(comm[k].num==comm[n-1].num)
//		{
//			printf("已经存在该编号,按任意键继续!");
//			getch();
//			fclose(wenjianzhizhen);
//			return;
//		}
//	printf("商品名:");
//	scanf("%s",comm[n-1].name);
//	printf("单价:");
//	scanf("%lf",&comm[n-1].price);
//	printf("数量:");
//	scanf("%lf",&comm[n-1].count);
//   	comm[n-1].total = comm[n-1].price * comm[n-1].count;
//   	if((wenjianzhizhen=fopen("data","wb"))==NULL)
//	{ 
//		printf("不能打开文件\n");
//		return;
//	}
//	for(k=0;k<=m;k++)
//		if(fwrite(&comm[k] ,LEN,1,wenjianzhizhen)!=1)/*将修改后的记录写入磁盘文件中*/
//		{
//			printf("不能保存!"); 
//			getch(); 
//		}
//	fclose(wenjianzhizhen);
// } 

void insert()
{
	int m=0;
	FILE *A=fopen("tushu111111111111111111111111111","ab+");
	if(A==NULL){printf("文件打不开,找不到记录。\n");return;}
	while(!feof(A))
	{
		if(fread(&comm[m],LEN,1,A)==1){printf("读取失败");fclose(A);return;}
		m++ ;
	}
	if(m==0){printf("当前没有记录,需要先录入才能插入。");return;}
	int summ;
	printf("请输入要插在第几个位置前:"); 
	scanf("%d",&summ);
	if(summ<1){printf("插入位置不合法,请重新输入位置:\n");scanf("%d",&summ);}
	if(summ>m+1)summ=m+1;
	int j=0;
	for(j=m-1;j>=summ-1;j--)
	{
		comm[j+1]=comm[j]; 
	}
	m++ ;
	printf("现在输入新的信息.\n");
	printf("编号:");
	scanf("%d",&comm[summ-1].num);
	int k=0;
	for(k=0;k<m;k++)
		if(comm[k].num==comm[summ-1].num && k!=summ-1)//有疑问,不明白。 
		{
			printf("已经存在该编号,按任意键继续!");
			getch();
			fclose(A);
			return;
		}
	printf("商品名:");
	scanf("%s",comm[summ-1].name);
	printf("单价:");
	scanf("%lf",&comm[summ-1].price);
	printf("数量:");
	scanf("%lf",&comm[summ-1].count);
	comm[summ-1].total = comm[summ-1].price * comm[summ-1].count;
	int p=0;
	if((A=fopen("data","wb"))==NULL)
	{ 
		printf("不能打开文件\n");
		return;
	}
	for(p=0;p<m;p++)
	{
		if(fwrite(&comm[p],LEN,1,A)!=1)
		{
			printf("存储到文件中失败……");
			getch();
		}
		fclose(A);
	}
		
	
}	
	
void in()/*录入商品信息*/
{
	int i,m=0;/*m是记录的条数*/
	char ch[2]; 
	
	FILE *fp;/*定义指向同一文件夹内的文件的指针,目前指向NULL*/
	fp=fopen("tushu111111111111111111111111111","ab+");//让指针fp指向“tushu”这个文件,并且用二进制打开。 
	//ab+ :可读、可写,用二进制,文件不存在先创建,不会覆盖,追加在末尾
    if(fp==NULL)/*打开指定文件*/
    { 
        printf("不能打开文件!\n");
        return;
    }
    while(!feof(fp)) //fp指向的文件还在继续读取,还没结束。这样情况下运行while里的内容。 
    { 
        if(fread(&comm[m] ,LEN,1,fp)==1)
            m++;/*统计当前记录条数*/
    }
    fclose(fp);//关闭对fp文件的连接。 
	//wb: 二进制写入文件,若文件不存在则会先创建再写入,会覆盖原文件 	
	if(m==0)printf("目前没有数据!\n");
	else
	{
		system("cls");
//        show();/*调用show函数,显示原有信息*/
	}
	if((fp=fopen("data","wb"))==NULL)//wb: 二进制写入文件,若文件不存在则会先创建再写入,会覆盖原文件 ,当输入的除了字符还有其他int,float 之类的数据的话,必须用wb,反之可以只用w.读取也是一样。 
    { 
        printf("不能打开文件!\n");
        return;
    }
    						//for(i=0;i<m;i++) fwrite(&comm[i] ,LEN,1,fp);/*向指定的磁盘文件写入信息*/    //这一句我觉得好像没用。 
	printf("要继续录入吗?(y/n):");
	scanf("%s",&ch); //这里的&用不用带上啊?因为ch 是一个数组了,好像就是一个指针。 
	while(strcmp(ch,"Y")||strcmp(ch,"y")) 
	{
		printf("编号:");
        scanf("%d",&comm[m].num);/*输入商品的编号*/
        {
        	int xunhuan_yong ;
			for(xunhuan_yong=0;xunhuan_yong<m;xunhuan_yong++)
			{
				if(comm[xunhuan_yong].num==comm[m].num)printf("\n该编号已登记,无法录入!\n");
				getch();
                fclose(fp);
                return; 
			}
		}
        printf("名字:");
        scanf("%d",&comm[m].name);/*输入商品的名字*/
        printf("单价:");
        scanf("%d",&comm[m].price);/*输入商品的单价*/
        printf("数量:");
        scanf("%d",&comm[m].count);/*输入商品的数量*/
        comm[m].total=comm[m].price * comm[m].count;  /*计算出总金额*/
        if(fwrite(&comm[m],LEN,1,fp)!=1)  /*将新录入的信息写入指定的磁盘文件*/
            {
                printf("保存失败,这是啷个回事呢?问问管理员叭。\n"); 
                getch(); 
            }
            else
            { 
                printf("%s 已经保存!\n",comm[m].name);
                m++;
            } 
	}
 } 

void show()//展示数据 
{
	FILE *wenjianzhizhen;
	int xunhuanyong =0;
	int m=0;
	wenjianzhizhen=fopen("data","ab+");//ab+是以   [b二进制方式]    打开   [+可读写文件] 来进行[a续写(不覆盖之前的东西)]。 
	while(!feof(wenjianzhizhen))
    {
        if(fread(&comm[m] ,LEN,1,wenjianzhizhen)==1) 
            m++;
    }  
    fclose(wenjianzhizhen); 
    printf("编号     商品名称      单价       数量      总金额\t\n") ;
    for(xunhuanyong=0;xunhuanyong<m;xunhuanyong++)
    { 
        printf(FORMAT,DATA);/*将信息按指定格式打印*/
    }
}

void menu()           /*自定义函数实现菜单功能*/
{
    system("cls");
    printf("\n\n\n\n\n");
    printf("\t\t\t\t|-------------------商品管理系统-----------------|\n");
    printf("\t\t\t\t|\t 0. 退出系统                             |\n");
    printf("\t\t\t\t|\t 1. 录入商品信息                         |\n");
    printf("\t\t\t\t|\t 2. 查找商品信息                         |\n");
    printf("\t\t\t\t|\t 3. 删除商品信息                         |\n");
    printf("\t\t\t\t|\t 4. 修改商品信息                         |\n");
    printf("\t\t\t\t|\t 5. 插入商品信息                         |\n");
    printf("\t\t\t\t|\t 6. 排序商品信息                         |\n");
    printf("\t\t\t\t|\t 7. 统计商品信息                         |\n");
    printf("\t\t\t\t|------------------------------------------------|\n\n");
    printf("\t\t\t选择(0-7):");
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值