C语言程序设计——校园超市销售管理系统

小编 2026-07-01 阅读:1348 评论:0
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<conio.h>...
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
#define N 100

void LoginIF();
void LoginTitle();
void ShoppingSettlement();
void stock();
void Manage();
void AddGoods();
void FindGoods();
void UpdateGoods();
void DeleteGoods();
int read_Message();

/***********************************************************/
/*结构体区*/
struct date{  //时间结构体
	int year;
	int month;
	int day;
};
struct goods{  //商品结构体
	char name[20];  //名称
	int number;  //编号
	struct date scdate;  //生产日期
	int OriginalCost;  //原价
	int UnitPrice;  //单价
	int inventory;  //库存量
	int sell;  //出售量
}goods[1000];  //结构体数组,最多存入1000个商品信息
/***********************************************************/

int total;

/***********************************************************/
/*文件夹写入区*/
int read_Message(){
	FILE *fp;
	int i=0;
	if((fp=fopen(\"goods.dat\",\"rb\"))==NULL){  //rb为了输入数据,打开一个二进制文件
		printf(\"\\n********暂无任何可读信息,按任意键继续*****\");
		getch();
		return 0;
	}
	while(feof(fp)!=1){
		fread(&goods[i],sizeof(struct goods),1,fp);  //从goods文件中读取1个元素
		if(goods[i].number==0){
			break;
		}else{
			i++;
		}
	}
	fclose(fp);
	return i;
}
void saveall(){
	FILE *fp;
	int i;
	if((fp=fopen(\"goods.dat\",\"wb\"))==NULL){  //wb为了输出输出,打开一个二进制文件
		printf(\"\\n\\t\\t\\t无法打开文件\\n\");
		return;
	}
	for(i=0;i<total;i++){
	 fwrite(&goods[i],sizeof(struct goods),1,fp);  //以二进制形式对文件进行操作,不局限于文本文件
	 }
	 fclose(fp);  //关闭文件
}
/***********************************************************/

int main(){
	LoginIF();
}


/*登录验证*/
void LoginIF(){
	int i=0;
	char username[20];
	char password[20];
	printf(\"\\t\\t******************************************\\n\");
	printf(\"\\t\\t\\t登录超市销量管理系统\\n\");
	printf(\"\\t\\t******************************************\\n\");
	do{
		printf(\"\\n\\t\\t\\t请输入用户名:\");
		gets(username);   //输入用户名
		fflush(stdin);   //清空输入缓冲区中的内容
		printf(\"\\t\\t\\t请输入密码:\");
		gets(password);   //输入密码

		/*判断用户名和密码是否正确*/
		if((strcmp(username,\"chaoshi\")==0) && (strcmp(password,\"123456\")==0)){
			printf(\"\\t\\t\\t欢迎使用\\n\");
			LoginTitle();   //若用户名密码正确,则跳转至登录首页
			break;
		}else{
			i++;
			if(i==3){
				printf(\"\\t\\t\\t您已错误三次,退出系统\");
				break;
			}
			printf(\"\\t\\t\\t登录失败,请重新登录\");
		}
	}while(1);
}


/*登录首页*/
void LoginTitle(){
	int choice;
	int flag=1;
	do{
		system(\"cls\");
		printf(\"\\n\");
		printf(\"\\t\\t******************************************\\n\");
		printf(\"\\t\\t\\t欢迎使用超市销售管理系统\\n\");
		printf(\"\\t\\t******************************************\\n\");
		printf(\"\\t\\t\\t1.购物结算\\n\");
		printf(\"\\t\\t\\t2.查看商品库存\\n\");
		printf(\"\\t\\t\\t3.商品管理\\n\");
		printf(\"\\t\\t\\t4.退出系统\\n\");
		printf(\"\\t\\t\\t请选择你想要进行的操作\\n\");
		scanf(\"%d\",&choice);

		switch(choice){
		case 1:
			ShoppingSettlement();  //选择1,跳转购物结算界面
			break;
		case 2:
			stock();  //选择2,跳转查看商品库存界面
			break;
		case 3:
			Manage();  //选择3,跳转商品管理界面
			break;
		case 4:
			exit(0);  //选择4,跳转退出系统界面
			flag=0;
			break;
		default:  //输入1~4之外的数,弹出错误提示
		    printf(\"\\n输入序号错误,请重新输入:\\n\");
		    break;
		}
		if(flag==0){
			break;
		}
	}while(flag);
}



/*购物结算界面*/
void ShoppingSettlement(){
	int m[1000],quality[1000],x,n=0;
	double y,money=0;
	int i,j,a[10],b[10],c=0;
	int id;
	struct goods shopping;
	id=read_Message();
	system(\"cls\");
	printf(\"\\n\\t\\t**************商品交易信息**************\\n\");	
	for(j=0;j<1000;j++){	
		printf(\"\\n\\t\\t\\t请您输入顾客需要购买的商品编号:\");
		scanf(\"%d\",m+j); 
		n++;
		for(i=0;i<id;i++){  //从goods.dat文件中找到对应的编号
			if(m[j]==goods[i].number){
				break;
			}
		}
	if(i==id){	
			printf(\"\\n\\t\\t\\t没有找到您想购买的商品\\n\");
			printf(\"\\n\\t\\t\\t按任意键继续\\n\");
			getch();
			return; 
		}		
		shopping=goods[i];  //让shopping等于第i个结构体
	if(shopping.inventory==0){     //判定想购买的商品是否卖完
	printf(\"\\n\\t\\t\\t对不起,您需要的商品已卖完,请重新购买\\n\\n\");
	}else{	
			printf(\"\\n\\t\\t编号\\t名称\\t生产期\\t\\t单价\");
			printf(\"\\n\\t\\t%d\\t%s\\t%d-%d-%d\\t%d\",shopping.number,shopping.name,shopping.scdate.year,shopping.scdate.month,shopping.scdate.day,shopping.UnitPrice);
			printf(\"\\n\\t\\t\\t请输入您需要购买的商品数量:  \");
			scanf(\"\\t%d\",quality+j);
			money=money+shopping.UnitPrice*quality[j];  //收款=单*数量
			shopping.inventory-=quality[j];  //库存减少
			shopping.sell+=quality[j];  //销售量增加
			goods[i]=shopping;
		    saveall();  //保存数据
			a[j-c]=m[j];
			b[j-c]=quality[j];
			a[j-c+1]=0;
			printf(\"\\n\\t\\t\\t您是否购买其他产品?(y/n):\");
			if(getch()==\'n\'){
				printf(\"\\n\\t\\t\\t按任意键继续\");
				getch();
			}else{
				continue;
			}
			system(\"cls\");
			printf(\"\\n\\t\\t******************************************\\n\");  //购物清单
			printf(\"\\n\\t\\t编号\\t名称\\t\\t数量\");
			for(i=0;i<10;i++){
				if(a[i]==0){
					break;
				}
				printf(\"\\n\\t\\t%d\",a[i]);  //输出用户买的第i件商品的编号
				switch(a[i]){
				case 1:  //如果编号是1,输出编号为1的商品名称
					shopping=goods[0];
					printf(\"\\t%s\",shopping.name);
					break;
				case 2:  //如果编号是2,输出编号为1的商品名称
					shopping=goods[1];
					printf(\"\\t%s\",shopping.name);
					break;
				case 3:  //如果编号是3,输出编号为1的商品名称
					shopping=goods[2];
					printf(\"\\t%s\",shopping.name);
					break;
				case 4:  //如果编号是4,输出编号为1的商品名称
					shopping=goods[3];
					printf(\"\\t%s\",shopping.name);
					break;
				case 5:  //如果编号是5,输出编号为1的商品名称
					shopping=goods[4];
					printf(\"\\t%s\",shopping.name);  //输出用户买的第i件商品的数量
					break;
				}
				printf(\"\\t\\t%d\",b[i]);
			}
			printf(\"\\n\\t\\t******************************************\\n\");
			printf(\"\\n\\t\\t\\t您应收现金¥:%f元\",money);
			printf(\"\\n\\t\\t\\t实收现金:\");
			scanf(\"%d\",&x);	
			y=x-money;
			printf(\"\\n\\t\\t\\t找回现金:%f\\n\",y);
		    printf(\"\\t\\t\\t是否继续使用购物结算(y/n)\");
			if(getch()==\'y\'){
				money=0;
				system(\"cls\");
				c=j+1;
			}else{
				break;
			}
		}
	}
	system(\"cls\");
	printf(\"\\n\\n\\t\\t**************本日的销售清单**************\\n\");	
	for(j=0;j<n;j++){
		printf(\"\\n\\t\\t\\t商品编号:%d\",m[j]);
		switch(m[j]){
		case 1:  //如果编号是1,输出编号为1的商品名称
			shopping=goods[0];
			printf(\"\\t商品名称:%s\",shopping.name);
			break;
		case 2:  //如果编号是2,输出编号为1的商品名称
			shopping=goods[1];
			printf(\"\\t商品名称:%s\",shopping.name);
			break;
		case 3:  //如果编号是3,输出编号为1的商品名称
			shopping=goods[2];
			printf(\"\\t商品名称:%s\",shopping.name);
			break;
		case 4:  //如果编号是4,输出编号为1的商品名称
			shopping=goods[3];
			printf(\"\\t商品名称:%s\",shopping.name);
			break;
		case 5:  //如果编号是5,输出编号为1的商品名称
			shopping=goods[4];
			printf(\"\\t商品名称:%s\",shopping.name);
			break;
		}
		printf(\"\\t卖出数量:%d\",quality[j]);
	}
	getch();
	LoginTitle();
}


void stock(){
	int i;
	struct goods a;  //创建一个新的结构体
	total=read_Message();  //打开goods.dat文件
	system(\"cls\");
	printf(\"\\n\\t\\t********************商品库存********************\\n\");
	if(total>0){
		printf(\"\\n\\t\\t编号\\t名称\\t库存量\\n\");
		for(i=0;i<total;i++){  //输出所有商品信息
			a=goods[i];
			printf(\"\\n\\t\\t%d\\t%s\\t%d\\n\",a.number,a.name,a.inventory);
		}
		printf(\"\\n\\t\\t******************************************\\n\");
	}else{
		printf(\"\\n\\t\\t********************系统暂无任何商品信息********************\\n\");
	}
	printf(\"\\t\\t\\t按任意键继续\");
	getch();
	LoginTitle();
}


/*商品管理界面*/
void Manage(){
	int choice;
	do{
		printf(\"\\n\");
		printf(\"\\t\\t******************************************\\n\");
		printf(\"\\t\\t\\t\\t商品管理菜单\\n\");
		printf(\"\\t\\t******************************************\\n\");
		printf(\"\\t\\t\\t1.添加商品\\n\");
		printf(\"\\t\\t\\t2.查询商品\\n\");
		printf(\"\\t\\t\\t3.更新商品\\n\");
		printf(\"\\t\\t\\t4.删除商品\\n\");
		printf(\"\\t\\t\\t5.返回上一级\\n\");
		printf(\"\\t\\t\\t请选择你想要进行的操作\\n\");
		scanf(\"%d\",&choice);

		switch(choice){
		case 1:   AddGoods();   break;
		case 2:   FindGoods();   break;
		case 3:   UpdateGoods();   break;
		case 4:   DeleteGoods();   break;
		case 5:   LoginTitle();   break;
		default:  //输入1~5之外的数,弹出错误提示
		    printf(\"\\n输入序号错误,请重新输入:\\n\");
		    break;
		}
	}while(1);
}
	




/***********************************************************/
/*添加商品*/
void AddGoods(){
	struct goods newgoods;
	char choice=\'y\';
	FILE *fp;
	int i=0;
	do{
		system(\"cls\");
		printf(\"\\n\\t\\t************添加商品信息*************\\n\");
		printf(\"\\t\\t\\t请输入商品名称:\");
		scanf(\"%s\",&newgoods.name);
		printf(\"\\n\");
		printf(\"\\t\\t\\t请输入商品编码:\");
		scanf(\"%d\",&newgoods.number);
		printf(\"\\n\\t\\t******************************************\\n\");
		printf(\"\\t\\t\\t请输入商品生产日期:\");
		scanf(\"%d-%d-%d\",&newgoods.scdate.year,&newgoods.scdate.month,&newgoods.scdate.day);
		printf(\"\\n\");
		printf(\"\\t\\t\\t请输入商品原价:\");
		scanf(\"%d\",&newgoods.OriginalCost);
		printf(\"\\n\");
		printf(\"\\t\\t\\t请输入商品单价:\");
		scanf(\"%d\",&newgoods.UnitPrice);
		printf(\"\\n\");
		printf(\"\\t\\t\\t请输入商品库存量:\");
		scanf(\"%d\",&newgoods.inventory);
		printf(\"\\n\");


		if((fp=fopen(\"goods.dat\",\"ab\"))==NULL){  //将输入的商品信息写入good.dat文件中
			printf(\"无法打开文件\");
			return ;
		}
		fwrite(&newgoods,sizeof(struct goods),1,fp);  //以二进制形式对文件进行操作,不局限于文本文件
		fclose(fp);    //重新确认是否继续录入
		printf(\"\\n还要继续;录入商品信息吗?(y/n)\");
		choice=getch();
	}while(choice==\'y\');
}
/*查询商品*/
void FindGoods(){
	int i;
	struct goods c;  //加入一个新的结构体数组
	total=read_Message();  //阅读文件goods.dat
	system(\"cls\");
	printf(\"\\nt\\t\\t********************商品信息********************\\n\");
	printf(\"\\n\\t\\t\\t商品总数:%d\",total);
	if(total>0){
		printf(\"\\n\\t\\t********************显示所有商品信息********************\\n\");
		printf(\"\\n\\t\\t编号\\t名称\\t生产期\\t\\t原价\\t单价\\t库存量\\n\");
		for(i=0;i<total;i++){   //输出所有的商品信息
			c=goods[i];
	printf(\"\\n\\t\\t%d\\t%s\\t%d-%d-%d\\t%d\\t%d\\t%d\\n\",c.number,c.name,c.scdate.year,c.scdate.month,c.scdate.day,c.OriginalCost,c.UnitPrice,c.inventory);
		}
	printf(\"\\n\\t\\t******************************************\\n\");
	}else{
	    printf(\"\\n**********系统中暂无任何商品信息*******\\n\");
	}
	printf(\"\\n按任意键继续\\n\");
	getch();
}
/*更新商品*/
void UpdateGoods(){
	int i;
	int id;
	struct goods gx;   //加入一个新的结构体数组
	char choice=\'n\';
	system(\"cls\");
	total=read_Message();
	printf(\"\\n\\t\\t\\t请输入你要更新的商品的编号:\");
	scanf(\"%d\",&id);
	for(i=0;i<total;i++){
		if(id==goods[i].number){
			break;
		}
	}	//如果,没有找到要更新的商品
	if(i==total){
		printf(\"\\n\\t\\t\\t没有找到您想更新的商品\\n\");
		printf(\"按任意键继续\");
		getch();
		return;
	}
	printf(\"\\n\\t\\t****************更新商品信息****************\\n\");
	printf(\"\\n\\t\\t\\t请输入商品名称:\");
	scanf(\"%s\",&gx.name);   //为什么取地址  因为它是一个基本类型的数据
	printf(\"\\n\\t\\t\\t请输入商品编码:\");
	scanf(\"%d\",&gx.number);
	printf(\"\\n\\t\\t\\t请输入商品生产期:\");
	scanf(\"%d-%d-%d\",&gx.scdate.year,&gx.scdate.month,&gx.scdate.day); 
	printf(\"\\n\\t\\t\\t请输入商品原价:\");
	scanf(\"%d\",&gx.OriginalCost);
    printf(\"\\n\\t\\t\\t请输入商品单价:\");
	scanf(\"%d\",&gx.UnitPrice);
	printf(\"\\n\\t\\t\\t请输入商品库存量:\");
	scanf(\"%d\",&gx.inventory);
	printf(\"\\n\\t\\t******************************************\\n\");	
	printf(\"\\t\\t\\t您确定要修改吗?(y/n)\");
	choice=getch();
	if(choice==\'n\'){
		printf(\"\\n\\t\\t\\t放弃修改,返回上一级\\n\");
		printf(\"\\n\\t\\t\\t按任意键继续\\n\");
		getch();
		return;
	}
  	goods[i]=gx;
	total-=1;
	saveall();
	printf(\"\\n\\t\\t\\t修改商品数据成功\\n\");
	printf(\"\\t\\t\\t按任意键继续\");
	getch();

}
/*删除商品*/
void DeleteGoods(){
	int i,j;
	int id;
	char choice=\'n\';
	system(\"cls\");
	total=read_Message();
	printf(\"\\n\\t\\t\\t请输入你要删除的商品的编码:\");
	scanf(\"%d\",&id);
	for(i=0;i<total;i++){
		if(id==goods[i].number){
			break;
		}
	}  //如果,没有找到要删除的商品
	if(i==total){
		printf(\"\\n\\t\\t\\t没有找到您想删除的商品\\n\");
		printf(\"\\n\\t\\t\\t按任意键继续\\n\");
		getch();
		return;
	}
	printf(\"\\t\\t\\t删除后无法恢复,您确定要删除吗?(y/n)\");
	choice=getch();
	if(choice==\'n\'){
		printf(\"\\n\\t\\t\\t放弃删除,返回上一级\\n\");
		printf(\"\\n\\t\\t\\t按任意键继续\\n\");
		getch();
		return;
	}
	for(j=i;j<total;j++){
		goods[j]=goods[j+1]	;
	}
	total-=1;
	saveall();
	printf(\"\\n\\t\\t\\t删除商品数据成功\\n\");
	printf(\"\\t\\t\\t按任意键继续\");
	getch();
}

\"在这里插入图片描述\"

大一练手作品,参考网上的其他作品,自己加了点东西改了点东西

版权声明

本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。

热门文章
  • 机房智能化温湿度解决方式之POE供电以太网温湿度传感器

    机房智能化温湿度解决方式之POE供电以太网温湿度传感器
    机房智能化温湿度解决方式之POE供电以太网温湿度传感器 北京盈创力和电子科技有限公司 智能型TCP网口温湿度记录仪 北京IP网络温湿度记录仪厂家,北京盈创力和 北京智能型TCP网口温湿度记录仪IP网络温湿度记录仪是一种新型的基于TCP/IP协议双绞线以太网标准温湿度采集模块,利用它可以实现现场温度值、相对湿度值的采集,同时利用其自身的RJ45通信接口可以方便地和机房监控主机或交换机集线器进行联网。 工作于-40℃~85℃工业级带...
  • Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering

    Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering
    Problem Statement 我们考虑一个具有马尔可夫性质、非线性、非高斯的状态空间模型(State Space Model):对于一个时间序列上的观测结果{yt,t∈N}\\{ y_t , t \\in N \\}{yt​,t∈N},我们认为每个观测结果yty_tyt​的生成依赖于一个无法直接观察的隐变量xt∈{xt,t∈N}x_t \\in \\{x_t , t \\in N \\}xt​∈{xt​,t∈N},即:p(...
  • HTTP状态保持的原理

    HTTP状态保持的原理
    a)在用户登录之后,浏览器返回响应的时候会在响应中添加上cookieb)浏览器接收到cookie之后会自动保存c)当用户再次请求同一服务器中的其他网页的时候,浏览器会自动带上之前保存的cookied)服务接收到请求之后可以请 request 对象中取到cookie 判断当前用户是否登录  Http是无状态的,就是连接时数据互通,关闭后...
  • Hive 系统函数及示例

    Hive 系统函数及示例
    查看所有系统函数 show functions; 函数分类 内置函数【系统函数】 数学函数: floor、round、ceil、cos、log2等 字符串函数: length、reverse、trim、lower、get_json_object、repeat等 收集函数: size 转换函数: cast 日期函数: year、month、datediff、date、date_add等 条件函数: coalesce、case…w...
  • CSRF的原理和防范措施

    CSRF的原理和防范措施
    a)攻击原理:i.用户C访问正常网站A时进行登录,浏览器保存A的cookieii.用户C再访问攻击网站B,网站B上有某个隐藏的链接或者图片标签会自动请求网站A的URL地址,例如表单提交,传指定的参数iii.而攻击网站B在访问网站A的时候,浏览器会自动带上网站A的cookieiv.所以网站A在接收到请求之后可判断当前用户是登录状态,所以...
标签列表