今天整理资料的时候就想着顺便发出来供大家参考一下~
大一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;
}
用到的文件:
界面如下:
别的页面大家可以自己试一下~