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