C语言管理系统

今天整理资料的时候就想着顺便发出来供大家参考一下~
大一c语言的课设源代码如下:

#include<stdlib.h>
#include<windows.h>//清屏 
#include<conio.h>//getch
#include<string.h>
#include<stdio.h>
#define len sizeof(struct Node)
void toxy(int x,int y);//控制光标 
void Adminsign();//管理员注册  
void AdminLogin();//管理员登录  
void AdminMenu();//管理员菜单 
void AddList();//添加商品
void AddHead(struct Node *temp);//头插 
void AddTail(struct Node *temp);//尾插 
void FreeList(struct Node* head);//删除指定节点
void ScanList(struct Node* head);//把链表存到文件里
struct Node * FindNode(char name[20]);//查询指定的节点
void Print1();//管理员查看菜单
void mlist(struct Node* head);//删除指定节点
void FindNode2();//按照商品名查找指定节点
void FindNode3();//按照价格查找指定节点
void Find();//查找方式函数
void sort();//排序函数
void asort(struct Node* head);//从小到大排序
void dsort(struct Node* head);//从大到小排序
void stat(struct Node* head);//统计商品
void Print2(struct Node* head);//打印链表
typedef struct Node{
	char name[20];
	float price;
	struct Node *next;
}node;
typedef struct users
{
	char name[20];
	char code[20];
	float money;
}Users;
struct Node *head = NULL;
struct Node *end = NULL;
void toxy(int x,int y)
{
	COORD pos={x,y};//y是行数,x为列数
	HANDLE Out=GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleCursorPosition(Out,pos);
}
void Adminsign()
{
	system("cls");
	FILE *fp;
	Users a,b;
	char temp[20];
	toxy(45,8);
	printf("欢迎来到注册界面!");
	toxy(45,9);
	printf("请输入你的用户名:\n");
	fp=fopen("users.txt","r");//r为拿出数据 
	toxy(62,9);
	scanf("%s",a.name);
	fread(&b,sizeof(struct users),1,fp);//&b用来接收数据的内存地址 
	while(1)//不断的判断读入的用户名和文件里的用户名(一个一个遍历)是否相等 
	{
	if(strcmp(a.name,b.name))//读入的用户名和文件中的用户名不同 
	{
	if(!feof(fp))//没到文件末尾 
	{
	fread(&b,sizeof(struct users),1,fp);//读数据即输出数据 
	}
	else{
	break;
	}
	}else{
		printf("用户名已存在,请重新注册!\n"); 
		fclose(fp);
		Adminsign();
	}
	}
	toxy(45,10);
	printf("请输入你的密码:\n");
	toxy(62,10);
	scanf("%s",a.code);
	toxy(45,11);
	printf("请确认你的密码:\n");
	toxy(62,11);
	scanf("%s",temp);
	do{
	if(strcmp(a.code,temp)==0)
	{
	fp=fopen("users.txt","a");//a为像文本添加尾数据 文件打开 
	//fprintf(fp,"%s  %s\n",a.name,a.code); 
	fwrite(&a,sizeof(struct users),1,fp);
	toxy(45,12); 
	printf("注册成功!\n");
	toxy(45,13);
	printf("即将返回登录界面!\n");
	toxy(45,14);
	printf("Loding....⊙·⊙");
	Sleep(3000);
	fclose(fp);
	AdminLogin();
	}else{
		printf("两次输入的密码不一致,请重新输入!\n");
		printf("请输入你的密码:\n");
		scanf("%s",a.code);
		printf("请确认你的密码:\n");
		scanf("%s",temp);
	}
	}while(1);	
}
void AdminLogin()
{
	FILE *fp;
	Users a,b; 
	system("cls");
	toxy(45,9);
	printf("登录界面\n");
	fp=fopen("users.txt","r");//r为拿出数据 
	toxy(45,10); 
	printf("请输入用户名:");
	toxy(62,10);
	scanf("%s",a.name);
	fread(&b,sizeof(struct users),1,fp);
	while(1)//判断文件中是否有账号 
	{
		if(strcmp(a.name,b.name)==0)
		{
			break;//在这不能关闭文件,不然读取密码时就不行了 
		}
		if(feof(fp)!=0)//未到文件末尾 
		{
			fread(&b,sizeof(struct users),1,fp);
		}else{//到文件末尾并且未找到用户名
		 	fclose(fp);
		 	printf("该用户名不存在,请重新输入");
		 	scanf("%s",a.name);
		}
	}
	toxy(45,11);
	printf("请输入密码:");
	toxy(62,11);
	scanf("%s",a.code);
	do
	{
		if(strcmp(a.code,b.code)==0)
		{
			toxy(45,12);
			printf("登陆成功!\n");
			toxy(45,13);
			printf("正在跳转到菜单页面,请稍等(*·▽·*)");
			fclose(fp);
			break;
		}else{
			toxy(45,12);
			printf("密码错误,请再次输入");
			toxy(62,12);
			scanf("%s",b.code);
		}
	}while(1);
	Sleep(2000);
	AdminMenu();
}
void AdminMenu()
{
	system("cls");
	char t;
	char name[20];
	toxy(45,5);
	printf("管理员菜单\n");
	toxy(35,6);
	printf("┌┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┐\n");
	toxy(35,8);
	printf("┇        1.查看文件内容      ┇\n");
	toxy(35,10);
	printf("┇        2.添加商品		┇\n");
	toxy(35,12);
	printf("┇        3.删除商品   	┇\n");
	toxy(35,14);
	printf("┇        4.修改商品   	┇\n");
	toxy(35,16);
	printf("┇        5.查找商品   	┇\n");
	toxy(35,18);
	printf("┇        6.保存数据到文件中  ┇\n");
	toxy(35,20);
	printf("┇	    7.商品统计          ┇\n");
	toxy(35,22);
	printf("┇	    8.排序              ┇\n");
	toxy(35,24);
	printf("┇        9.打印链表          ┇\n");
	toxy(35,26);
	printf("┇	    10.退出菜单         ┇\n");
	toxy(35,28);
	printf("└┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┘\n");
	toxy(40,30);
	printf("请选择:");
	while(1)
	{
	t=getch();
	switch(t)
	{
		case '1':Print1();break;
		case '2':AddList();break;
		case '3':FreeList(head);break;
		case '4':mlist(head);break;
		case '5':Find();break;
		case '10':AdminLogin();break;
		case '6':ScanList(head);break;
		case '7':stat(head);break;
		case '9':Print2(head);break;
		case '8':sort();break;
	}
	}
} 
void AddList()
{
	char c,t; 
	do{
	system("cls");
	struct Node *temp= (struct Node*)malloc(len);
	toxy(45,7);
	printf("┌┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┐\n");
	toxy(45,8);
	printf("┇        添加商品           ┇\n");
	toxy(45,9);
	printf("└┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┘\n");
	toxy(45,10);
	printf("┇      商品名 ┇        价格 ┇\n"); 
	toxy(45,11);
	printf("└┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┘\n");
	toxy(45,12);
	printf("请输入商品信息:\n");
	toxy(45,13);
	scanf("%s %f",&temp->name,&temp->price);
	toxy(45,14);
	printf("请选择插入信息的方式:\n");
	toxy(45,15);
	printf("1.头插\n");
	toxy(45,16);
	printf("2.尾插\n"); 
	char t;
	t=getch();
	switch(t)
	{
		case '1':AddHead(temp);break;
		case '2':AddTail(temp);break;
	}
	toxy(45,17); 
	printf("添加成功!是否继续添加商品?[y/n]\n");
	toxy(45,18);
	c=getch();
	}while(c!='n'&&c!='N');
	printf("即将返回主菜单\n");
		AdminMenu(); 
}
void AddHead(struct Node *temp){
	if(head==NULL)
	{
		head=end=temp;
	}else{
		head->next=temp->next;
		head->next=temp;
	}
}
void AddTail(struct Node *temp){
	if(head==NULL)
	{
		head=end=temp;
	}else{
		end->next=temp;
		end=temp;
		temp->next=NULL;
	}
}
void FreeList(struct Node* head)
{
	system("cls");
	char name[20],t;
	toxy(45,9);
	printf("输入你想删除的菜品名:");
	scanf("%s",&name);
	struct Node *temp=FindNode(name);
	if(NULL==temp)
	{
		printf("没有此菜品");
	}
	struct Node *pt=head;
	while(pt->next!=temp)
	{
		pt=pt->next;
	}
	pt->next=temp->next;
	free(temp);
	toxy(45,10);
	printf("删除成功");
	Sleep(5000);
	printf("即将返回主菜单");
	system("cls");
	AdminMenu();
}
struct Node *FindNode(char name[20])
{
	struct Node *temp=head;
	while(temp!=NULL)
	{
		if(strcmp(name,temp->name)==0)//strcmp函数比较两个字符串时,两串相等,返回值为0
		{
			return temp;
		}
		temp=temp->next;
	}
	return NULL;
}
void Find()
{
	char t;
	system("cls");
	toxy(45,7);
	printf("请选择你要查找的方式");
	toxy(45,8);
	printf("1.按商品名查找");
	toxy(45,9);
	printf("2.按价格查找");
	while(1)
	{
	t=getch();
	switch(t)
	{
		case '1':FindNode2();break;
		case '2':FindNode3();break;
	}
	}
}
void FindNode2()
{
	system("cls");
	char name[20];
	int count=0;
	toxy(45,7);
	printf("请输入你要查找的菜品名:");
	scanf("%s",&name);
	struct Node *temp=head;
	while(temp!=NULL)
	{
		if(strcmp(name,temp->name)==0)//strcmp函数比较两个字符串时,两串相等,返回值为0
		{
			toxy(45,8);
			printf("商品名      价格\n");
			toxy(45,9);
			printf("%s %f\n",temp->name,temp->price);
			count=1;
		}
		temp=temp->next;
	}
	if(count==0)
	{
		toxy(45,10);
		printf("没有找到");
	}
	toxy(45,10);
	printf("即将返回主菜单\n");
	Sleep(5000);
	AdminMenu();
}
void FindNode3()
{
	system("cls");
	float price;
	int count=0;
	toxy(45,7);
	printf("请输入你要查找的价格:");
	scanf("%f",&price);
	struct Node *temp=head;
	while(temp!=NULL)
	{
		if(price==temp->price)
		{
			toxy(45,8);
			printf("商品名      价格\n");
			toxy(45,9);
			printf("%s %f\n",temp->name,temp->price);
			count=1;
		}
		temp=temp->next;
	}
	if(count==0)
	{
		toxy(45,10);
		printf("没有找到");
	}
	toxy(45,10);
	printf("即将返回主菜单\n");
	Sleep(5000);
	AdminMenu();
}
void mlist(struct Node* head){
	system("cls");
	char name[20];
	toxy(45,12);
	printf("请输入你要修改价格的商品名:");
	scanf("%s",&name);
	struct Node *p=head;
	while(p!=NULL)
	{
		if(strcmp(name,p->name)==0)//strcmp函数比较两个字符串时,两串相等,返回值为0
		{
			toxy(45,13);
			printf("请输入修改后的价格");
			scanf("%f",&p->price);
		}
		p=p->next;
	}
	toxy(45,14);
	printf("修改成功!");
	Sleep(2000);
	printf("即将返回主菜单");
	AdminMenu();
}
void ScanList(struct Node *head)//菜单列表 ,把链表整体输入到文件里面
{
	system("cls");
	char t,c;
	FILE *fp;
	struct Node *p=head;
	toxy(45,9);
	printf("请选择您要添加的商品类型:\n");
	toxy(45,10);
	printf("1.锅底\n");
	toxy(45,11);
	printf("2.荤菜\n");
	toxy(45,12);
	printf("3.素菜\n");
	toxy(45,13);
	printf("4.饮品\n"); 
	t=getch();
	switch(t)
	{
	case '1':fp=fopen("hotpot.txt","a");break;//a是只写
	case '2':fp=fopen("meat.txt","a");break;
	case '3':fp=fopen("sucai.txt","a");break;
	case '4':fp=fopen("drink.txt","a");break;
	default:break;
	}
	if(fp==NULL)
	{
		toxy(45,14);
		printf("文件打开失败\n");
		return;
	}
	system("cls");
	while(p)
	{
	fprintf(fp,"%s %.f\n",p->name,p->price);
	p=p->next;
	}
	toxy(45,15);
	printf("保存到文件成功!\n");
   	fprintf(fp,"\n");
   	fclose(fp);//关闭文件
	toxy(45,16);
	printf("即将返回主菜单");
	Sleep(2000);
	AdminMenu();
}

void Print1()//读文件里的东西 //把这些信息一行一行输出打印到屏幕,管理员查看
{
	
	char t,a;
	char  s[20]; //定义一个字符数组   
    char  *p  =  s; //定义一个字符型指针
	int i=9;
	FILE *fp;
	system("cls");
	toxy(45,9);
	printf("请选择您要查看的商品类型:");
	toxy(45,10);
	printf("1.锅底");
	toxy(45,11);
	printf("2.荤菜");
	toxy(45,12);
	printf("3.素菜");
	toxy(45,13);
	printf("4.饮品"); 
	t=getch();
	switch(t)
	{
		case '1':fp=fopen("hotpot.txt","r");break;//r为只读
		case '2':fp=fopen("meat.txt","r");break;
		case '3':fp=fopen("sucai.txt","r");break;
		case '4':fp=fopen("drink.txt","r");break;
		default:break;
	}
	system("cls");
	toxy(45,8);
	printf("菜品名     价格/元"); 
   while ((p = fgets(s,20,fp)) != NULL)//如果函数读取成功,则返回指针buf,失败则返回NULL。
	{ 
	toxy(45,i);            
	printf("%s",s); 
    i++; //控制行数
    }           
	fclose(fp);
	toxy(45,25);
	printf("是否返回主菜单[y/n]");
	a=getch();
	if(a=='y'||a=='Y')
	{
		AdminMenu();
	}else{
		Print1();
	}
	
  }  
void stat(struct Node* head){
	system("cls");
	struct Node* p=head;
	int count=0;
	float sum=0.0;
	while(p)
	{
	count++;
	sum+=p->price;
	p=p->next;
	}
	toxy(45,7);
	printf("添加了%d个菜品,总共有%f元",count,sum);
	Sleep(5000);
	AdminMenu();
}
void Print2(struct Node* head)
{
	int i=7;
	system("cls");
	struct Node *p=head;
	toxy(45,6);
	printf("菜品名      价格");
	while(p)
	{

		toxy(45,i);
		printf("%s %f\n",p->name,p->price);
		p=p->next;
		i++;
	}
	Sleep(5000);
	AdminMenu();

}
void asort(struct Node *head)
{
	system("cls");
	node a[100];
	node temp;
	int i,j,count=0,k=7;
	struct Node *p=head;
	while(p!=NULL)
	{
		strcpy(a[count].name,p->name);//字符串不能直接赋值
		a[count].price=p->price;
		count++;
		p=p->next;
	}
	for(i=0;i<count-1;i++)
	{
		for(j=i+1;j<count;j++)
		{
			if(a[i].price>a[j].price)
			{
				temp=a[i];
				a[i]=a[j];
				a[j]=temp;
			}
		}
	}
	for(i=0;i<count;i++)
	{
		toxy(45,6);
		printf("菜品名      价格");
		toxy(45,k);
		printf("%s %f\n",a[i].name,a[i].price);
		k++;
	}//先打印一遍到屏幕
	Sleep(5000);
	AdminMenu();

}
void dsort(struct Node* head)
{
	system("cls");
	node a[100];
	node temp;
	int i,j,count=0,k=7;
	struct Node *p=head;
	while(p!=NULL)
	{
		strcpy(a[count].name,p->name);//字符串不能直接赋值
		a[count].price=p->price;
		count++;
		p=p->next;
	}
	for(i=0;i<count-1;i++)
	{
		for(j=i+1;j<count;j++)
		{
			if(a[i].price<a[j].price)
			{
				temp=a[i];
				a[i]=a[j];
				a[j]=temp;
			}
		}
	}
	for(i=0;i<count;i++)
	{
		toxy(45,6);
		printf("菜品名      价格");
		toxy(45,k);
		printf("%s %f\n",a[i].name,a[i].price);
		k++;
	}//先打印一遍到屏幕
	Sleep(5000);
	AdminMenu();
}
void sort()
{
	system("cls");
	char t;
	toxy(45,7);
	printf("请选择你要查看的方式");
	toxy(45,9);
	printf("1.价格从低到高");
	toxy(45,11);
	printf("2.价格从高到低");
	t=getch();
	if(t=='1')
	{
	asort(head);
	}else if(t=='2')
	{
	dsort(head);
	}
}
int main()
{
	do{
		char t;
		system("color B0");//背景颜色为白色,字体颜色为紫色
		toxy(35,6);
		printf("******************************\n");
		toxy(35,7);
		printf("*   欢迎来到咕咕火锅店       *\n");
		toxy(35,8);
		printf("******************************\n");
		toxy(35,11);
		printf("1.管理员登录\n");
		toxy(35,13);
		printf("2.管理员注册\n");
		toxy(35,15);
		printf("请选择你要登录的方式:\n");
		while(1)
		{
		t=getch();
		if(t=='1')
		{
			AdminLogin();
		}else if(t=='2')
		{
			Adminsign();
		}
		}
	}while(1);
	return 0;
 } 


用到的文件:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
界面如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
别的页面大家可以自己试一下~

  • 33
    点赞
  • 78
    收藏
    觉得还不错? 一键收藏
  • 22
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值