关于管理系统你必须知道的秘密!!!

自打我上个学期学了C语言后,我觉得自个啥也没学到,这学期突然让我们做一个管理系统(此时内心是崩溃的),最后在我坚持不懈的百度,在CSDN的搜索下终于完成了这个综合实验报告(历经坎坷)。我还没有弄懂指针是怎么一回事,所以我里面除了老师教我们保存到本地磁盘上的方法用到了指针,其他地方我都没有用到指针。

第一个秘密:我们应先构建一个大致框架,这个系统要干什么,要有什么功能,先进行一个需求分析。

先上个思维导图叭,我做的第一个项目居然是零食管理系统(感觉说出来都不好意思)

首先我们得有一个登录系统,设置密码,这样子就不会无密码乱入(由于我学的不怎么样,所以我的密码是初始化,无法更改的)。

第二个秘密:最最最重要的,也是我们最拿手的,就是复制粘贴咯,哈哈哈

说实话,其实里面的排序啊,查找啊,他们里面的分支只要你会了其中一个,那都不是事,上代码上代码

#include <stdio.h>
#include <conio.h>
#include <process.h>
#include <string.h>
char initial[]="123456";//管理员所需要输入的密码
struct goods
{
   char id[10];
   char name[25];
   double price;
};
struct goods snack[100];//从struct到struct是数据结构
int count=0;//设置一个全局变量
void menu()//主菜单
{
	system("cls");
	system("color F5");//程序运行时的字体颜色
	printf("----------欢迎使用零食管理系统----------\n");
	printf("          1.录入零食信息\n");
    printf("          2.显示零食信息\n");
	printf("          3.按零食信息查找\n");
	printf("          4.修改零食信息\n");
	printf("          5.对零食信息进行排序\n");
    printf("          6.删除零食信息\n");
	printf("          7.保存信息\n");
	printf("          0.退出管理系统\n");
	printf("----------------------------------------\n");
}
void input()//录入零食信息
{   char name[25];
	system("cls");
    printf("请输入零食名称,以ok结束\n");
	while(scanf("%s",name), strcmp(strlwr(name),"ok")!=0)//比较字符串大小,以ok结束信息录入
	{strcpy(snack[count].name,name);
	 printf("请输入零食编号:");
	 scanf("%s",snack[count].id);
	 printf("请输入零食价格:");
	 scanf("%lf",&snack[count].price);
	 count++;
	}
	system("pause");
}
void show()//显示零食信息
{
	int i;
	system("cls");
	for(i=0;i<count;i++)
		printf("%s\t%s\t%lf\n",snack[i].name,snack[i].id,snack[i].price);
	system("pause");
}
void seekByName()
{
	char n[25];
	system("cls");
	printf("请输入零食名称:\n");
	scanf("%s",n);
	for(int i=0;i<=count;i++)
	{
		if(strcmp(n,snack[i].name)==0)//比较字符串大小,找到相同的名字
	
		{printf("名称:%s\t价格:%lf\t编号:%s\n",snack[i].name,snack[i].price,snack[i].id);}
	}
	system("pause");
}
void seekById()
{
	char d[25];
	system("cls");
	printf("请输入零食编号:\n");
	scanf("%s",d);
	for(int i=0;i<=count;i++)
	{
		if(strcmp(d,snack[i].id)==0)//同上方法
	
		{printf("名称:%s\t价格:%lf\t编号:%s\n",snack[i].name,snack[i].price,snack[i].id);}	
	}
	system("pause");
}
void seek()//查找零食信息
{
	int s;
	printf("*1.按零食名称查找*\n");
    printf("*2.按零食编号查找*\n");
	printf("请选择:\n"),scanf("%d",&s);
		switch(s)
		{
		case 1: seekByName();break;
		case 2: seekById(); break;
		}
		system("pause");
}
void change()//修改零食信息
{
	char b[10];
	int i;
	system("cls");
	show();
	printf("请输入需要修改的零食编号:\n");
	scanf("%s",b);
	for(i=0;i<count;i++){
		if(strcmp(snack[i].id,b)==0){
			printf("请输入你所要修改的零食名称:\n");
			scanf("%s",snack[i].name);
			printf("请输入你所要修改的零食价格:\n");
			scanf("%lf",&snack[i].price);
			printf("请输入你所要修改的零食编号:\n");
			scanf("%s",snack[i].id);
		}
	}
	system("pause");
}
void sortIdup()
{
		int k,l;
	struct goods t;
	for(k=0;k<count;k++)//运用冒泡排序,从小到大排序
	{
		for(l=k+1;l<count;l++)
		{
			if(strcmp(snack[k].id,snack[l].id)>0)
			{
				t=snack[k];
				snack[k]=snack[l];
				snack[l]=t;
			}
		}
	}
		printf("按编号升序排列后:\n");
		for(k=0;k<count;k++)
		{printf("编号:%s\t名称:%s\t价格:%lf\n",snack[k].id,snack[k].name,snack[k].price);}
	system("pause");
}
void sortIddown()
{
	int k,l;
	struct goods t;
	for(k=0;k<count;k++)
	{
		for(l=k+1;l<count;l++)
		{
			if(strcmp(snack[k].id,snack[l].id)<0)//从大到小排序
			{
				t=snack[k];
				snack[k]=snack[l];
				snack[l]=t;
			}
		}
	}
		printf("按编号降序排列后:\n");
		for(k=0;k<count;k++)
		{printf("编号:%s\t名称:%s\t价格:%lf\n",snack[k].id,snack[k].name,snack[k].price);}
	system("pause");
}
void sortPriceup()
{
	  int i,j;
	struct goods m;
	for(i=0;i<count;i++)
	{
		for(j=i+1;j<count;j++)
		{
			if(snack[i].price>snack[j].price)//从小到大排序
			{
				m=snack[i];
				snack[i]=snack[j];
				snack[j]=m;
			}
		}
	}
		printf("按价格升序排列后:\n");
		for(i=0;i<count;i++)
		{printf("编号:%s\t名称:%s\t价格:%lf\n",snack[i].id,snack[i].name,snack[i].price);}
		system("pause");
}
void sortPricedown()
{
	int k,l;
	struct goods t;
	for(k=0;k<count;k++)
	{
		for(l=k+1;l<count;l++)
		{
			if(snack[k].price<snack[l].price)//从大到小排序
			{
				t=snack[k];
				snack[k]=snack[l];
				snack[l]=t;
			}
		}
	}
		printf("按价格降序排列后:\n");
		for(k=0;k<count;k++)
		{printf("编号:%s\t名称:%s\t价格:%lf\n",snack[k].id,snack[k].name,snack[k].price);}
	system("pause");
}
void sort()//排序的方法都一样,都是运用冒泡排序进行的
{
		int s;
	printf("*1.按零食编号升序*\n");
    printf("*2.按零食编号降序*\n");
	printf("*3.按零食价格升序*\n");
	printf("*4.按零食价格降序*\n");
	printf("请选择:\n"),scanf("%d",&s);
		switch(s)
		{
		case 1: sortIdup();break;
		case 2: sortIddown();break;
		case 3: sortPriceup();break;
		case 4: sortPricedown();break;
		}
	system("pause");
}
void removeByName()
{
	char m[25];
	int k,l;
	system("cls");
	show();
	printf("请输入你要删除的零食名称:\n");
	scanf("%s",m);
	for(k=0;k<count;k++)
	{if(strcmp(snack[k].name,m)==0)//找到相同的名字,跳出循环
	break;}
	if(k<count)
	{
		for(l=k+1;l<count;l++)
		{snack[l-1]=snack[l];}
		count--;
		printf("该零食已被删除\n");
	}
	system("pause");
}
void removeById()
{
	char m[25];
	int k,l;
	system("cls");
	show();
	printf("请输入你要删除的零食编号:\n");
	scanf("%s",m);
	for(k=0;k<count;k++)
	{if(strcmp(snack[k].id,m)==0)//找到相同的编号,跳出循环
	break;}
	if(k<count)
	{
		for(l=k+1;l<count;l++)
		{snack[l-1]=snack[l];}
		count--;
		printf("该零食已被删除\n");
	}
	system("pause");
}
void remove()//删除零食信息
{
		int s;
	printf("*1.按零食名称删除*\n");
    printf("*2.按零食编号删除*\n");
	printf("请选择:\n"),scanf("%d",&s);
		switch(s)
		{
		case 1: removeByName();break;
		case 2: removeById(); break;
		}
	system("pause");
}
void save()//保存零食信息结果到本地磁盘
{
	FILE *fp=NULL;
	int i;
	fp=fopen("d:\\snack.text","w");
	for(i=0;i<count;i++)
	{
		fprintf(fp,"%s\t%s\t%lf\n",snack[i].name,snack[i].id,snack[i].price );
	}
	fclose(fp);
}
int main()//主函数,里面含有有关输入密码的方法
{  char itl[50],ch;
    int i=0,max=3,sel;
	printf("请输入管理员密码:\n");
	while(1)
	{
			while(ch=getch(),ch!='\r')
	{  
		if (ch=='\b')//帮助删除已输入错误的密码
	   {
			printf("\b \b");
			if (i>0) i--;
		}
		else
		{
			itl[i]=ch;
	        i++;
	        putchar('*');//当输入密码数字时,程序输出*
		}
	}
	itl[i]='\0';
	if  (strcmp(initial,itl)==0)
	{
	  while(1)
	  {
		menu();
		printf("请选择:\n"),scanf("%d",&sel);
		switch(sel)
		{
		case 1: input();break;
		case 2: show(); break;
		case 3: seek();break;
		case 4: change();break;
		case 5: sort();break;
		case 6: remove();break;
		case 7: save();break;
		case 0: return 0;
		}
	  }
	}
	else
	{
		printf("密码错误,请重新输入:\n");
		max--;
		if (max<=0) 
		{	printf("账号锁定,请退出");return 0;
		}
	}
	}
    printf("\n");
	system("pause");
	return 0;
}

整体来说,我觉得其实管理系统都大同小异,区别不大,只要掌握了其中一种,基本上就都会了,只是功能实现需要自己去思考和搜索。我的代码不够完善,还有许多缺点,欢迎大家来“找茬”。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值