【C语言课程设计】统计学生基本信息以及美食和图书信息
课程设计要求:
1、课程设计的任务要求:
大数据时代来临,寻找东林最美味的美食,最值得读的书。
已知:现有3个文件的结构,分别记录学生学籍卡表、校园一卡通发行表、一卡通使用记录表。
2、程序功能要求:
2.1设计程序运行界面;
2.2编写程序按已知表样建立相应文件;
2.3编写程序分别向建立文件中录入测试样本数据;
2.4 编写程序实现各种数据的统计功能。
2.4.1统计东林最好吃的美食,给出最好吃的美食都是哪些同学常吃的。
2.4.2统计东林借阅最多的书,给出都是哪些同学借阅的。
bianliang.h(自定义头文件,功能是定义两个链表)
#ifndef BIANLIANG_H_INCLUDED
#define BIANLIANG_H_INCLUDED
using namespace std;
struct node_stu
{
long long num,id;
string grade,name,major,place;//卡号、学号、年级、姓名、专业、生源地
struct node_stu *next;
};
struct node_bf
{
long long id;
string book,food;
struct node_bf *next;
};
#endif // BIANLIANG_H_INCLUDED
hanshu.h(自定义头文件,功能是引用函数)
#ifndef HANSHU_H_INCLUDED
#define HANSHU_H_INCLUDED
extern void pr(char *p1);
extern void jingdutiao();
extern void menu();
extern struct node_stu *build_stu();
extern struct node_bf *build_bf();
extern struct node_stu *add_stu(struct node_stu *head1);
extern struct node_bf *add_bf(struct node_stu *head1,struct node_bf *head2);//加入书本和美食信息
extern struct node_stu *modify_stu(struct node_stu *head1);
extern struct node_bf *modify_bf(struct node_bf *head2);
extern struct node_stu *del_stu(struct node_stu *head1);
extern struct node_bf *del_bf(struct node_bf *head2);
extern struct node_stu *output_stu(struct node_stu *head1);
extern struct node_bf *output_bf(struct node_bf *head2);
extern void exit_stu(struct node_stu *head1);
extern void exit_bf(struct node_bf *head2);
extern int get1();
extern int get2();
#endif // HANSHU_H_INCLUDED
new_build.cpp(写所有需要用到的函数,核心代码)
#include <bits/stdc++.h>
#include <windows.h>
#include "bianliang.h"
typedef long long ll;
using namespace std;
int cnt_stu,cnt_bf;
void pr(char *p1)//延迟打印效果
{
Sleep(200);
while(1)
{
if(*p1!=0)printf("%c",*p1++);
else break;
Sleep(35);
}
}
void SetColor(unsigned short ForeColor,unsigned short BackGroundColor)//颜色
{
HANDLE hCon=GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hCon,(ForeColor%16)|(BackGroundColor%16*16));
}
void jingdutiao()//进度条
{
pr("程序正在加载中,请稍后...\n\n");
for(int i=1;i<=50;i++)
{
SetColor(0,14);
printf(" ");
printf("%d%%",2*i);
Sleep(101-1*i);
printf("\b\b\b");
}
SetColor(15,0);
printf("\n");
pr("\n\n加载完成!即将进入...");
Sleep(2000);
}
void menu()
{
system("cls");//清屏
printf("\n\t\t\t\t\t——————欢迎使用 nefu_ljw 正版软件!——————\n\n");
printf("\t\t\t\t\t当前已保存 %d 个学生的基本信息\n\n",cnt_stu);
printf("\t\t\t\t\t当前已保存 %d 个借书和点菜信息\n\n",cnt_bf);
printf("\t\t\t\t\t这里是主菜单页面,您可以输入数字来进行操作:\n\n");
printf("\t\t\t\t\t|#1 新建学生信息系统(只需要新建一次即可)\n\n");
printf("\t\t\t\t\t|#2 增加学生的基本信息\n\n");
printf("\t\t\t\t\t|#3 修改学生的基本信息\n\n");
printf("\t\t\t\t\t|#4 删除学生的基本信息\n\n");
printf("\t\t\t\t\t|#5 查看学生的基本信息\n\n");
printf("\t\t\t\t\t|#6 增加借书和点菜信息\n\n");
printf("\t\t\t\t\t|#7 修改借书和点菜信息\n\n");
printf("\t\t\t\t\t|#8 删除借书和点菜信息\n\n");
printf("\t\t\t\t\t|#9 查看借书和点菜信息\n\n");
printf("\t\t\t\t\t|#0 保存数据并退出系统\n\n");
pr("请输入一个数字,选择您想要的功能:\n");
//printf("请输入一个数字,选择您想要的功能:\n");
}
void insert_stu(struct node_stu *head1,ll num,string name,string major,string grade,string place,ll id)//链表中插入学生信息时按学号的从小到大排序
{
struct node_stu *p,*newnode;
p=head1;
while(p!=NULL)
{
if(p->next==NULL)
{
p->next=new node_stu;//不能用malloc!
p=p->next;
p->num=num;
p->name=name;
p->major=major;
p->grade=grade;
p->place=place;
p->id=id;
p->next=NULL;
break;
}
else
{
if( num > p->num && num < p->next->num )
{
newnode=new node_stu;//不能用malloc!
newnode->num=num;
newnode->name=name;
newnode->major=major;
newnode->grade=grade;
newnode->place=place;
newnode->id=id;
newnode->next=p->next;
p->next=newnode;
break;
}
}
p=p->next;
}
}
void insert_bf(struct node_bf *head2,ll id,string book,string food)//链表中插入借书和点菜时按卡号的从小到大排序,如果卡号相同,则后输入的排在最后面
{
struct node_bf *p,*newnode;
p=head2;
while(p!=NULL)
{
if(p->next==NULL)
{
//p->next=(struct node_bf*)malloc(sizeof(struct node_bf));
p->next=new node_bf;//不能用malloc!
p=p->next;
p->id=id;
p->book=book;
p->food=food;
p->next=NULL;
break;
}
else
{
if( id >= p->id && id < p->next->id )
{
//newnode=(struct node_bf*)malloc(sizeof(struct node_bf));
newnode=new node_bf;//不能用malloc!
newnode->id=id;
newnode->book=book;
newnode->food=food;
newnode->next=p->next;
p->next=newnode;
break;
}
}
p=p->next;
}
}
bool find_num(struct node_stu *head1,ll num)//查找第一个链表中是否已经有了num这个学号
{
struct node_stu *p;
p=head1->next;
while(p!=NULL)
{
if(p->num==num)return 1;
p=p->next;
}
return 0;
}
bool find_id(struct node_stu *head1,ll id)//查找第一个链表中是否已经有了id这个卡号
{
struct node_stu *p;
p=head1->next;
while(p!=NULL)
{
if(p->id==id)return 1;
p=p->next;
}
return 0;
}
struct node_stu *build_stu()//新建一个信息管理系统函数
{
ll id,num;
string grade,name,major,place;
struct node_stu *H;
//H=(struct node_stu*)malloc(sizeof(struct node_stu));//这是错的!!!
H=new node_stu;//这里一定不能用malloc分配内存!!!
H->num=-1;//赋值头节点为-1后可以特判插入的学号比第一个元素小的情况
H->next=NULL;
system("cls");
printf("请依次输入每个学生的 学号 姓名 专业 年级 生源地 校园一卡通号码:\n");
while(1)
{
cnt_stu++;
printf("\n请输入学生的学号:");
cin>>num;
if(cnt_stu>1&&find_num(H,num)){printf("已经存在学号为 %lld 的学生,请重新输入!\n\n",num);cnt_stu--;continue;}
printf("请输入学生的姓名:");
cin>>name;
printf("请输入学生的专业:");
cin>>major;
printf("请输入学生的年级:");
cin>>grade;
printf("请输入学生的生源地:");
cin>>place;
printf("请输入学生的校园一卡通号码:");
cin>>id;
insert_stu(H,num,name,major,grade,place,id);
printf("\n是否继续录入学生信息?是:1 否:0\n");
int f;cin>>f;
if(f==0)break;
}
printf("\n输入的所有学生信息已录入成功!进入主菜单后输入数字5即可查看所有学生基本信息!\n\n");
system("pause");
return(H);
}
struct node_bf *build_bf()//新建一个借书和点菜信息管理系统
{
cnt_bf=0;
struct node_bf *H;
//H=(struct node_bf*)malloc(sizeof(struct node_bf));//这是错的!
H=new node_bf;//这里一定不能用malloc分配内存!!!
H->id=-1;//赋值头节点为-1后可以特判插入的卡号比第一个元素小的情况
H->next=NULL;
return(H);
};
struct node_stu *add_stu(struct node_stu *head1)//增加学生信息
{
if(cnt_stu==0){printf("\n请先新建学生信息系统后(输入数字1),再增加学生信息!\n\n");system("pause");return(head1);}
printf("\n确定要增加学生信息吗?是:1 否:0\n");
int f;cin>>f;
if(f==0)return(head1);
ll id,num;
string grade,name,major,place;
system("cls");
printf("请依次输入要增加的学生的 学号 姓名 专业 年级 生源地 校园一卡通号码:\n");
cnt_stu++;
printf("\n请输入要增加的学生的学号:");
cin>>num;
if(cnt_stu>1&&find_num(head1,num)){printf("已经存在学号为 %lld 的学生,请重新输入!\n\n",num);cnt_stu--;system("pause");return(head1);}
printf("请输入要增加的学生的姓名:");
cin>>name;
printf("请输入要增加的学生的专业:");
cin>>major;
printf("请输入要增加的学生的年级:");
cin>>grade;
printf("请输入要增加的学生的生源地:");
cin>>place;
printf("请输入要增加的学生的校园一卡通号码:");
cin>>id;
insert_stu(head1,num,name,major,grade,place,id);
printf("\n录入成功!进入主菜单后输入数字5即可查看所有学生基本信息!\n\n");
system("pause\n");
return(head1);
};
struct node_bf *add_bf(struct node_stu *head1,struct node_bf *head2)//增加借书和点菜信息,head1是学生基本信息链表头,head2是保存借书和点菜信息的链表头
{
if(cnt_stu==0){printf("\n当前还没有学生信息,请先增加学生信息!\n\n");system("pause");return(head2);}
printf("\n确定要增加借书和点菜信息吗?是:1 否:0\n");
int f;cin>>f;
if(f==0)return(head2);
ll id;
string book,food;
system("cls");
printf("请依次输入要增加的 校园一卡通号码 该卡号借书记录 该卡号点菜记录:\n");
while(1)
{
printf("\n请输入校园一卡通号码:");
cin>>id;
if(!find_id(head1,id)){printf("不存在卡号为 %lld 的学生,请先增加该卡号学生的信息!\n\n",id);system("pause");continue;}
printf("请输入该卡号借书记录:");
cin>>book;
printf("请输入该卡号点菜记录:");
cin>>food;
insert_bf(head2,id,book,food);
cnt_bf++;
printf("\n是否继续录入借书和点菜信息?是:1 否:0\n");
int flag;cin>>flag;
if(flag==0)break;
}
printf("\n输入的所有信息已录入成功!进入主菜单后输入数字9即可查看所有借书和点菜信息!\n\n");
system("pause\n");
return(head2);
};
struct node_stu *modify_stu(struct node_stu *head1)//修改学生信息
{
if(cnt_stu==0){printf("\n当前还没有学生信息,请先增加学生信息!\n\n");system("pause");return(head1);}
printf("\n确定要修改学生信息吗?是:1 否:0\n");
int f1;cin>>f1;
if(f1==0)return(head1);
system("cls");
ll id,num;
string grade,name,major,place;
printf("请输入您要修改的学生的学号:");
cin>>num;
struct node_stu *p;
p=head1->next;
int flag=0;
while(p!=NULL)
{
if(p->num==num){flag=1;break;}
p=p->next;
}
if(flag==0){printf("\n没有找到您输入的学号,请重新输入!\n\n");system("pause");return(head1);}
else
{
printf("\n您要修改的学生信息为:\n");
printf("学号:%lld\t姓名:%s\t专业:%s\t年级:%s\t生源地:%s\t校园一卡通号码:%lld\n",p->num,p->name.c_str(),p->major.c_str(),p->grade.c_str(),p->place.c_str(),p->id);
printf("\n确定要修改该学生的信息吗?(该学生的卡号对应的借书和点菜信息不会被修改)是:1 否:0\n");
int f;cin>>f;
if(f==1)
{
printf("请输入修改后的学号:");
cin>>num;
printf("请输入修改后的姓名:");
cin>>name;
printf("请输入修改后的专业:");
cin>>major;
printf("请输入修改后的年级:");
cin>>grade;
printf("请输入修改后的生源地:");
cin>>place;
printf("请输入修改后的校园一卡通号码:");
cin>>id;
p->num=num;
p->name=name;
p->major=major;
p->grade=grade;
p->place=place;
p->id=id;
printf("\n修改成功!进入主菜单后输入数字5即可查看修改后的所有学生基本信息!\n\n");
system("pause");
}
return(head1);
}
};
struct node_bf *modify_bf(struct node_bf *head2)//修改借书和点菜信息
{
if(cnt_stu==0){printf("\n当前还没有学生信息,请先增加学生信息!\n\n");system("pause");return(head2);}
if(cnt_bf==0){printf("\n当前还没有借书和点菜信息,请先增加借书和点菜信息!\n\n");system("pause");return(head2);}
printf("\n确定要修改借书和点菜信息吗?是:1 否:0\n");
int f1;cin>>f1;
if(f1==0)return(head2);
system("cls");
ll id;
string book,food;
printf("请输入您要修改的借书和点菜信息对应的校园一卡通号码:");
cin>>id;
struct node_bf *p,*p0,*np;
p=head2->next;
int flag=0,sum=0;
while(p!=NULL)
{
if(p->id==id){flag=1;p0=p;break;}
p=p->next;
}
while(p!=NULL)
{
if(p->id==id)sum++;
else break;
p=p->next;
}
if(flag==0){printf("\n没有找到您输入的校园一卡通号码,请重新输入!\n\n");system("pause");return(head2);}
else
{
printf("\n校园一卡通号码为 %lld 的借书和点菜记录一共有 %d 条:\n\n",id,sum);
printf("校园一卡通号码\t\t\t借书记录\t\t\t点菜记录\t\t\t对应的数字编号\n");
p=p0;
for(int i=1;i<=sum;i++)
{
printf("%lld\t\t\t%s\t\t\t%s\t\t\t%d\n",p->id,p->book.c_str(),p->food.c_str(),i);
p=p->next;
}
printf("\n确定要修改该卡号的借书和点菜信息吗?是:1 否:0\n");
int f;cin>>f;
if(f==1)
{
while(1)
{
int n;
printf("\n请输入要修改的记录对应的数字编号:");
cin>>n;
if(n<1||n>sum){printf("数字编号错误!请重新输入!\n\n");continue;}
printf("请输入修改后的书名:");
cin>>book;
printf("请输入修改后的菜名:");
cin>>food;
np=p0;
for(int i=1;i<=n-1;i++)
np=np->next;
np->book=book;
np->food=food;
printf("\n修改成功!进入主菜单后输入数字9即可查看修改后的所有借书和点菜信息!\n\n");
printf("是否继续修改该卡号的借书和点菜信息?是:1 否:0\n");
int f1;cin>>f1;
if(f1==0)break;
}
}
return(head2);
}
};
struct node_stu *del_stu(struct node_stu *head1)//删除学生信息
{
if(cnt_stu==0){printf("\n当前还没有学生信息,请先增加学生信息!\n\n");system("pause");return(head1);}
printf("\n确定要删除学生信息吗?是:1 否:0\n");
int f1;cin>>f1;
if(f1==0)return(head1);
system("cls");
printf("请输入您要删除的学号:");
ll num;cin>>num;
struct node_stu *p,*np;
p=head1;
int flag=0;
while(p->next!=NULL)
{
if(p->next->num==num){flag=1;break;}
p=p->next;
}
if(flag==0){printf("\n没有找到您输入的学号,请重新输入!\n\n");system("pause");return(head1);}
else
{
np=p->next;
printf("\n您要删除的学生信息为:\n");
printf("学号:%lld\t姓名:%s\t专业:%s\t年级:%s\t生源地:%s\t校园一卡通号码:%lld\n",np->num,np->name.c_str(),np->major.c_str(),np->grade.c_str(),np->place.c_str(),np->id);
printf("\n确定要删除该学生的信息吗?(该学生的卡号对应的借书和点菜信息不会被删除)是:1 否:0\n");
int f;cin>>f;
if(f==1)
{
if(p->next->next==NULL)p->next=NULL;
else p->next=p->next->next;
cnt_stu--;
printf("\n删除成功!进入主菜单后输入数字5即可查看删除后的所有学生基本信息!\n\n");
system("pause");
}
return(head1);
}
};
struct node_bf *del_bf(struct node_bf *head2)//删除借书和点菜信息
{
if(cnt_stu==0){printf("\n当前还没有学生信息,请先增加学生信息!\n\n");system("pause");return(head2);}
if(cnt_bf==0){printf("\n当前还没有借书和点菜信息,请先增加借书和点菜信息!\n\n");system("pause");return(head2);}
printf("\n确定要删除借书和点菜信息吗?是:1 否:0\n");
int f1;cin>>f1;
if(f1==0)return(head2);
system("cls");
ll id;
string book,food;
printf("请输入您要删除的借书和点菜信息对应的校园一卡通号码:");
cin>>id;
struct node_bf *p,*p0;//p0为要删除的卡号在第二个链表中第一次出现时的前驱节点
p=head2;
int flag=0,sum=0;
while(p->next!=NULL)
{
if(p->next->id==id){flag=1;p0=p;break;}
p=p->next;
}
while(p->next!=NULL)
{
if(p->next->id==id)sum++;
p=p->next;
}
if(flag==0){printf("\n没有找到您输入的校园一卡通号码,请重新输入!\n\n");system("pause");return(head2);}
else
{
printf("\n校园一卡通号码为 %lld 的借书和点菜记录一共有 %d 条:\n\n",id,sum);
printf("校园一卡通号码\t\t\t借书记录\t\t\t点菜记录\t\t\t对应的数字编号\n");
p=p0;
for(int i=1;i<=sum;i++)
{
p=p->next;
printf("%lld\t\t\t%s\t\t\t%s\t\t\t%d\n",p->id,p->book.c_str(),p->food.c_str(),i);
}
printf("\n确定要删除该卡号的借书和点菜记录吗?(每次只能删除一条记录) 是:1 否:0\n");
int f;cin>>f;
if(f==1)
{
int n;
while(1)
{
printf("\n请输入要删除的记录对应的数字编号:");
cin>>n;
if(n<1||n>sum)printf("数字编号错误!请重新输入!\n\n");
else break;
}
p=p0;
for(int i=1;i<=n-1;i++)
p=p->next;
if(p->next->next==NULL)p->next=NULL;
else p->next=p->next->next;
cnt_bf--;
printf("\n删除成功!进入主菜单后输入数字9即可查看删除后的所有借书和点菜信息!\n\n");
system("pause");
}
return(head2);
}
};
struct node_stu *output_stu(struct node_stu *head1)//查看学生信息
{
system("cls");
printf("---学号---\t\t\t姓名\t\t\t专业\t\t\t年级\t\t\t生源地\t\t\t校园一卡通号码\n");
if(cnt_stu==0){printf("\n当前还没有学生信息,请先增加学生信息!\n\n");system("pause");return(head1);}
struct node_stu *p;
p=head1->next;
while(p!=NULL)
{
printf("%lld\t\t\t%s\t\t\t%s\t\t\t%s\t\t\t%s\t\t\t%lld\n",p->num,p->name.c_str(),p->major.c_str(),p->grade.c_str(),p->place.c_str(),p->id);
p=p->next;
}
printf("\n以上是当前已录入的所有学生的基本信息(已自动按学号由小到大排序)\n\n");
system("pause");
return(head1);
};
struct node_bf *output_bf(struct node_bf *head2)//查看借书和点菜信息
{
system("cls");
printf("校园一卡通号码\t\t\t借书记录\t\t\t点菜记录\n");
if(cnt_stu==0){printf("\n当前还没有学生信息,请先增加学生信息,再增加借书和点菜信息!\n\n");system("pause");return(head2);}
if(cnt_bf==0){printf("\n当前还没有借书和点菜信息,请先增加借书和点菜信息!\n\n");system("pause");return(head2);}
map<string,int>vis1,vis2;
int mx1=1,mx2=1;
string book_mx_name=head2->next->book,food_mx_name=head2->next->food;
struct node_bf *p;
p=head2->next;
while(p!=NULL)
{
vis1[p->book]++;
vis2[p->food]++;
if(vis1[p->book]>mx1){mx1=vis1[p->book];book_mx_name=p->book;}
if(vis2[p->food]>mx2){mx2=vis2[p->food];food_mx_name=p->food;}
printf("%lld\t\t\t%s\t\t\t%s\n",p->id,p->book.c_str(),p->food.c_str());
p=p->next;
}
printf("\n以上是当前已录入的所有借书和点菜信息(已自动按校园一卡通号码由小到大排序)\n\n");
p=head2->next;
string ans1[110],ans2[110];
map<string,int>flag1,flag2;
int cnt1=0,cnt2=0;
while(p!=NULL)
{
if(vis1[p->book]==mx1)
{
if(!flag1[p->book])ans1[++cnt1]=p->book;//cnt1表示最大的图书数量对应的图书名称有几种
flag1[p->book]=1;
}
if(vis2[p->food]==mx2)
{
if(!flag2[p->food])ans2[++cnt2]=p->food;//cnt2表示最大的美食数量对应的美食名称有几种
flag2[p->food]=1;
}
p=p->next;
}
printf("图书和美食的统计数据:\n\n");
if(cnt1==1)printf("最受欢迎的图书名称:《%s》 它总共出现了%d次\n\n",book_mx_name.c_str(),mx1);
else
{
printf("最受欢迎的图书名称:");
for(int i=1;i<=cnt1;i++)
printf("《%s》 ",ans1[i].c_str());
printf("它均出现了%d次\n\n",mx1);
}
if(cnt2==1)printf("最受欢迎的美食名称:《%s》 它总共出现了%d次\n\n",food_mx_name.c_str(),mx2);
else
{
printf("最受欢迎的美食名称:");
for(int i=1;i<=cnt2;i++)
printf("《%s》 ",ans2[i].c_str());
printf("它们均出现了%d次\n\n",mx2);
}
system("pause");
return(head2);
};
void exit_stu(struct node_stu *head1)//退出时保存学生信息
{
FILE *fp;
if((fp=fopen("student_data.txt","a+"))==NULL)
fp=fopen("student_data.txt","a+");
fprintf(fp,"---学号---\t\t姓名\t\t专业\t\t年级\t\t生源地\t\t校园一卡通号码\n");
struct node_stu *p;
p=head1->next;
while(p!=NULL)
{
fprintf(fp,"%lld\t%s\t\t%s\t\t%s\t\t%s\t\t%lld\n",p->num,p->name.c_str(),p->major.c_str(),p->grade.c_str(),p->place.c_str(),p->id);
p=p->next;
}
fclose(fp);
};
void exit_bf(struct node_bf *head2)//退出时保存借书和点菜信息
{
FILE *fp;
if((fp=fopen("book_and_food_data.txt","a+"))==NULL)
fp=fopen("book_and_food_data.txt","a+");
fprintf(fp,"校园一卡通号码\t\t\t借书记录\t\t\t点菜记录\n");
struct node_bf *p;
map<string,int>vis1,vis2;
int mx1=1,mx2=1;
string book_mx_name=head2->next->book,food_mx_name=head2->next->food;
p=head2->next;
while(p!=NULL)
{
vis1[p->book]++;
vis2[p->food]++;
if(vis1[p->book]>mx1){mx1=vis1[p->book];book_mx_name=p->book;}
if(vis2[p->food]>mx2){mx2=vis2[p->food];food_mx_name=p->food;}
fprintf(fp,"%lld\t\t\t%s\t\t\t%s\n",p->id,p->book.c_str(),p->food.c_str());
p=p->next;
}
fprintf(fp,"\n以上是当前已录入的所有借书和点菜信息(已自动按校园一卡通号码由小到大排序)\n\n");
p=head2->next;
string ans1[110],ans2[110];
map<string,int>flag1,flag2;
int cnt1=0,cnt2=0;
while(p!=NULL)
{
if(vis1[p->book]==mx1)
{
if(!flag1[p->book])ans1[++cnt1]=p->book;//cnt1表示最大的图书数量对应的图书名称有几种
flag1[p->book]=1;
}
if(vis2[p->food]==mx2)
{
if(!flag2[p->food])ans2[++cnt2]=p->food;//cnt2表示最大的美食数量对应的美食名称有几种
flag2[p->food]=1;
}
p=p->next;
}
fprintf(fp,"图书和美食的统计数据:\n\n");
if(cnt1==1)fprintf(fp,"最受欢迎的图书名称:《%s》 它总共出现了%d次\n\n",book_mx_name.c_str(),mx1);
else
{
fprintf(fp,"最受欢迎的图书名称:");
for(int i=1;i<=cnt1;i++)
fprintf(fp,"《%s》 ",ans1[i].c_str());
fprintf(fp,"它们均出现了%d次\n\n",mx1);
}
if(cnt2==1)fprintf(fp,"最受欢迎的美食名称:《%s》 它总共出现了%d次\n\n",food_mx_name.c_str(),mx2);
else
{
fprintf(fp,"最受欢迎的美食名称:");
for(int i=1;i<=cnt2;i++)
fprintf(fp,"《%s》 ",ans2[i].c_str());
fprintf(fp,"它们均出现了%d次\n\n",mx2);
}
fclose(fp);
}
int get1(){return cnt_stu;}
int get2(){return cnt_bf;}
main.cpp(主函数)
#include <bits/stdc++.h>
#include "hanshu.h"
using namespace std;
int main()
{
system("mode con cols=150");
system("mode con lines=50");
string s;
int f,opt,cnt1,cnt2;
struct node_stu *phead1;
struct node_bf *phead2;
jingdutiao();//进度条
system("color 0b");
while(1)
{
menu();
cin>>s;
opt=s[0]-'0';
if(s.length()>1||opt<0||opt>9)
{
printf("\n输入错误!请重新输入一个0~9以内的数字!\n\n");
system("pause");
continue;
}
if(opt==0)
{
printf("\n确定要退出程序吗?退出程序后您录入的全部数据将会被保存在文件中。 是:1 否:0\n");
cin>>f;
if(f==1)
{
cnt1=get1();cnt2=get2();
if(cnt1!=0)exit_stu(phead1);
if(cnt2!=0)exit_bf(phead2);
printf("\n保存成功!所有学生的基本信息已保存于student_data.txt,所有借书和点菜信息已保存于book_and_food_data.txt!\n\n");
printf("感谢您的使用,再见!\n\n");
getchar();getchar();
break;
}
else continue;
}
switch(opt)
{
case 1:
{
printf("\n新建一个信息系统将会删除已保存的所有数据(包括学生基本信息以及借书和点菜记录),确定要新建吗? 是:1 否:0\n");
cin>>f;
if(f==1){phead1=build_stu();phead2=build_bf();}
break;
}
case 2:add_stu(phead1);break;
case 3:modify_stu(phead1);break;
case 4:del_stu(phead1);break;
case 5:output_stu(phead1);break;
case 6:add_bf(phead1,phead2);break;
case 7:modify_bf(phead2);break;
case 8:del_bf(phead2);break;
case 9:output_bf(phead2);break;
}
}
}
总共七百行代码的样子,第一次用C++写一个小项目,虽然很累,但是很有成就感~