大一上学期期末项目设计;
思路参考:【千锋教育新版C语言程序设计视频教程(适合自学,c语言初学者入门教程)】 https://www.bilibili.com/video/BV1id4y1375a/?p=119&share_source=copy_web&vd_source=a6401c9820869ff8ca006c68478cde72
代码段:
#include#include#include#include#include//创建数据域 struct Date{int year;int month;int day;};struct Goods{int goods1cost;int goods2cost;int goods3cost;int totalcost;};struct Other{char likes[10];int integral;//积分为消费额的两倍; char coupon[20];};struct number { char rank;//等级分 A/B/C/D/E 500积分为D,1000积分为C,2000积分积分为B,4000积分为A;char name[10]; char phonenumber[20];char gender[5];//性别分 男 / 女struct Date link; struct Goods cost; struct Other thing2;};//创建节点 struct Node{struct number data;struct Node *pnext;};//头部指针全局化 struct Node *list=NULL;//功能选项总开关; int key=0;//函数声明区域 struct Node* CreatHead();//初始化头部指针 void gotoxy(int x,int y);//光标定位 void changeColors();//改变控制台颜色函数 struct Node* createNode(struct number data);//创建新节点函数 void insertInfo(struct Node* headNode,struct number data);//插入新数据节点函数 void saveInfo(char *filename,struct Node *headNode);//同步文件数据函数 void readInfo(char *filename,struct Node*headNode);//读取文件函数 void showlist(struct Node*headNode);//总体打印函数 void showlistplus(struct Node*headNode);//筛选函数 void showlistplus2(struct Node*headNode);//筛选函数 void analysis(struct number *temp);//分析函数 void analysisplus(struct Node *temp);//分析函数 void menu();//总菜单 struct Node* SearchByName(struct Node* headNode,char *name);//根据姓名查找函数 struct Node* SearchByphonenumber(struct Node* headNode,char *number);//根据手机号码查找函数 void deleteByname(struct Node* headNode, char *name);//删除数据函数 void menuone();//修改会员信息菜单 void keyEvent();//选择功能 //函数声明区域结束 //主函数 int main(){changeColors();//初始化头部指针 list=CreatHead();//读取原来文件的数据 readInfo("numberInfo.txt",list);while(1){menu();keyEvent();if(key==0)break;system("pause");system("cls"); //清屏}system("cls"); //清屏return 0;}//用于初始化头部指针 struct Node* CreatHead(){struct Node *pHeadNode = (struct Node*)malloc(sizeof(struct Node));if(pHeadNode == NULL)return NULL;pHeadNode->pnext=NULL;return pHeadNode;}//用于输出 " Nice to meet you " void gotoxy(int x,int y){// 光标定位函数COORD p;//定义结构体变量pHANDLE handle=GetStdHandle(STD_OUTPUT_HANDLE);// 获取当前函数句柄p.X=x;p. Y=y;//将光标的目标移动位置传递给结构体SetConsoleCursorPosition(handle,p);//移动光标}void changeColors(){system("color F4");//改变屏幕的背景色和前景色gotoxy(8,8);//光标定位到指定位置printf("Nice to meet you!\n");getch( );}//创建新的节点 struct Node* createNode(struct number data){struct Node *newNode=(struct Node*)malloc(sizeof(struct Node));if(newNode==NULL)return NULL;newNode->data=data;newNode->pnext=NULL;return newNode;}void insertInfo(struct Node* headNode,struct number data){//根据传来的temp,创建一个新的Node 的结构体; newNodestruct Node *newNode= createNode(data);newNode->pnext = headNode -> pnext;headNode->pnext=newNode;}//同步文件操作 void saveInfo(char *filename,struct Node *headNode){//打开文件FILE *fp=fopen(filename, "w");//写入文件 fprintfstruct Node *move = headNode->pnext;//fprintf(fp,"等级 姓名 性别 手机号 生日 商品1消费额 商品2消费额 商品3消费额 总消费额 积分 偏好 优惠券\n");while(move!=NULL){fprintf(fp,"%c %s %s %s %d/%d/%d %d %d %d %d %d %s %s\n",move->data.rank,move->data.name,move->data.gender,move->data.phonenumber,move->data.link.year,move->data.link.month,move->data.link.day,move->data.cost.goods1cost,move->data.cost.goods2cost,move->data.cost.goods3cost,move->data.cost.totalcost,move->data.thing2.integral,move->data.thing2.likes,move->data.thing2.coupon);move=move->pnext;}//关闭文件 fclose(fp);}//读取文件操作 void readInfo(char *filename,struct Node*headNode){//fscanf 返回EOF FILE *fp = fopen(filename,"r");if(fp==NULL){fp = fopen(filename,"w");fclose(fp);return;}struct number temp;//"等级 姓名 性别 手机号码 生日 商品1消费额 商品2消费额 商品3消费额 总消费额 积分 偏好 优惠券\n"while(fscanf(fp,"%c %s %s %s %d/%d/%d %d %d %d %d %d %s %s\n",&temp.rank,temp.name,temp.gender,&temp.phonenumber,&temp.link.year,&temp.link.month,&temp.link.day,&temp.cost.goods1cost,&temp.cost.goods2cost,&temp.cost.goods3cost,&temp.cost.totalcost,&temp.thing2.integral,temp.thing2.likes,temp.thing2.coupon)!=EOF){insertInfo(list,temp);}fclose(fp);}//总览全部信息 void showlist(struct Node*headNode){struct Node *move = headNode->pnext;//printf("等级 姓名 性别 手机号码 生日 商品1消费额 商品2消费额 商品3消费额 总消费额 积分 偏好 优惠券\n");while(move!=NULL){printf("%c\t%s\t%s\t%s\t%d/%d/%d\t%d\t%d\t%d\t%d\t%d\t%s\t%s\n",move->data.rank,move->data.name,move->data.gender,move->data.phonenumber,move->data.link.year,move->data.link.month,move->data.link.day,move->data.cost.goods1cost,move->data.cost.goods2cost,move->data.cost.goods3cost,move->data.cost.totalcost,move->data.thing2.integral,move->data.thing2.likes,move->data.thing2.coupon);move=move->pnext;}}//筛选优质会员信息 void showlistplus(struct Node*headNode){struct Node *move= headNode->pnext;while(move!=NULL){if(move->data.cost.totalcost>=4000){printf("%c\t%s\t%d\t%d\t优质会员\n",move->data.rank,move->data.name,move->data.cost.totalcost,move->data.thing2.integral);}move=move->pnext;}}//筛选信息 void showlistplus2(struct Node*headNode){struct Node *move= headNode->pnext;while(move!=NULL){if(move->data.cost.totalcost>=4000){printf("%c\t%s\t%d\t%d\t%s\t优质会员\n",move->data.rank,move->data.name,move->data.cost.totalcost,move->data.thing2.integral,move->data.thing2.likes);}move=move->pnext;}}//进行数据分析 void analysis(struct number *temp){temp->cost.totalcost=(temp->cost.goods1cost)+(temp->cost.goods2cost)+(temp->cost.goods3cost);temp->thing2.integral=(temp->cost.totalcost)*2;if(temp->thing2.integral>=500&&temp->thing2.integralrank='D';strcpy(temp->thing2.coupon,"30元代金券3张"); }else if(temp->thing2.integral>=1000&&temp->thing2.integralrank='C';strcpy(temp->thing2.coupon,"40元代金券4张");}else if(temp->thing2.integral>=2000&&temp->thing2.integralrank='B';strcpy(temp->thing2.coupon,"80元代金券5张");}else if(temp->thing2.integral>=4000){temp->rank='A';strcpy(temp->thing2.coupon,"200元代金券6张");}else{temp->rank='E';strcpy(temp->thing2.coupon,"10元代金券5张"); }if(temp->cost.goods1cost>temp->cost.goods2cost){if(temp->cost.goods3cost>temp->cost.goods1cost){strcpy(temp->thing2.likes,"商品3"); }else{strcpy(temp->thing2.likes,"商品1"); }}else{if(temp->cost.goods3cost>temp->cost.goods2cost){strcpy(temp->thing2.likes,"商品3"); }else{strcpy(temp->thing2.likes,"商品2"); }}}//进行修改数据后的数据分析 void analysisplus(struct Node *temp){temp->data.cost.totalcost=(temp->data.cost.goods1cost)+(temp->data.cost.goods2cost)+(temp->data.cost.goods3cost);temp->data.thing2.integral=(temp->data.cost.totalcost)*2;if(temp->data.thing2.integral>=500&&temp->data.thing2.integraldata.rank='D';strcpy(temp->data.thing2.coupon,"30元代金券3张");}else if(temp->data.thing2.integral>=1000&&temp->data.thing2.integraldata.rank='C';strcpy(temp->data.thing2.coupon,"40元代金券4张");}else if(temp->data.thing2.integral>=2000&&temp->data.thing2.integraldata.rank='B';strcpy(temp->data.thing2.coupon,"80元代金券5张");}else if(temp->data.thing2.integral>=4000){temp->data.rank='A';strcpy(temp->data.thing2.coupon,"200元代金券6张");}else{temp->data.rank='E';strcpy(temp->data.thing2.coupon,"10元代金券5张"); }if(temp->data.cost.goods1cost>temp->data.cost.goods2cost){if(temp->data.cost.goods3cost>temp->data.cost.goods1cost){strcpy(temp->data.thing2.likes,"商品3"); }else{strcpy(temp->data.thing2.likes,"商品1"); }}else{if(temp->data.cost.goods3cost>temp->data.cost.goods2cost){strcpy(temp->data.thing2.likes,"商品3"); }else{strcpy(temp->data.thing2.likes,"商品2"); }} }//打印菜单 void menu(){ printf("|*============================================*|\n"); printf("|*欢迎使用会员管理系统*|\n"); printf("|*============================================*|\n"); printf("|*1.录入会员信息*|\n"); printf("|*2.查找会员信息*|\n"); printf("|*3.修改会员信息*|\n"); printf("|*4.删除会员*|\n"); printf("|*5.会员消费奖励*|\n"); printf("|*6.优质会员筛选*|\n"); printf("|*7.优质会员商品推荐*|\n"); printf("|*8.速览会员信息*|\n"); printf("|*0.退出系统*|\n"); printf("|*============================================*|\n"); printf(" 请输入功能选项0-8\n"); }//姓名查找函数 struct Node* SearchByName(struct Node* headNode,char *name){struct Node *move = headNode->pnext;while(move!=NULL){if(strcmp(move->data.name,name)==0)break;move=move->pnext;}return move;}//手机号码查找函数 struct Node* SearchByphonenumber(struct Node* headNode,char *number){struct Node *move = headNode->pnext;while(move!=NULL){if(strcmp(move->data.phonenumber,number)==0)break;move=move->pnext;}return move;}//删除函数 void deleteByname(struct Node* headNode, char *name){struct Node *move = headNode->pnext;struct Node *pre = headNode;while(move!=NULL){if(strcmp(move->data.name,name)==0)break;pre = move;move=move->pnext;}if(move==NULL){return ;}else{printf("----------删除成功!------------\n"); pre->pnext=move->pnext;free(move);move=NULL;}}//修改信息功能菜单 void menuone(){printf("请问要修改的会员信息:\n");printf("1.姓名\n");printf("2.手机号码\n");printf("3.商品1消费额\n");printf("4.商品2消费额\n");printf("5.商品3消费额\n");}//总体的key事件,用于功能选择 void keyEvent(){ struct number temp; struct Node* result; int key2=0; printf("请输入选项:");scanf("%d", &key); switch (key) { case 1: printf("您选择的功能是 [录入会员信息] \n");printf("录入的会员信息 姓名,性别,手机号码,生日(Year/Month/Day),商品1消费额,商品2消费额,商品3花费消费额\n");printf("请输入姓名:");scanf("%s",temp.name);printf("请输入性别:");scanf("%s",temp.gender);getchar();printf("请输入手机号码:");scanf("%s",temp.phonenumber);printf("请输入生日:");scanf("%d/%d/%d",&temp.link.year,&temp.link.month,&temp.link.day);printf("请输入商品1消费额度:");scanf("%d",&temp.cost.goods1cost); printf("请输入商品2消费额度:");scanf("%d",&temp.cost.goods2cost); printf("请输入商品3消费额度:"); scanf("%d",&temp.cost.goods3cost); //分析数据 analysis(&temp);//同步到链表中insertInfo(list,temp);//同步文件saveInfo("numberInfo.txt",list);break; case 2:printf("您选择的功能是 [查找会员信息] \n"); printf("请选择以那种方式查找:\n"); printf("1.姓名查找\n"); printf("2.手机号码查找\n"); printf("选择方式: "); scanf("%d",&key2); switch(key2){ case 1: printf("查询的会员姓名:");scanf("%s",temp.name);result=SearchByName(list,temp.name);break; case 2:printf("查询的会员手机号码:");scanf("%s",temp.phonenumber);result=SearchByphonenumber(list,temp.phonenumber);break;default:break;}if(result==NULL){printf("----------未找到此会员----------\n");} else{printf("等级\t姓名\t性别\t手机号码\t生日\t\t商品1消费额\t商品2消费额\t商品3消费额\t总消费额\t积分\t偏好\t优惠券\n");printf("%c\t%s\t%s\t%s\t%d/%d/%d\t%d\t%d\t%d\t%d\t%d\t%s\t%s\n",result->data.rank,result->data.name,result->data.gender,result->data.phonenumber,result->data.link.year,result->data.link.month,result->data.link.day,result->data.cost.goods1cost,result->data.cost.goods2cost,result->data.cost.goods3cost,result->data.cost.totalcost,result->data.thing2.integral,result->data.thing2.likes,result->data.thing2.coupon);}break; case 3:printf("您选择的功能是 [修改会员信息] \n"); printf("请选择以那种方式查找:\n"); printf("1.姓名查找\n"); printf("2.手机号码查找\n"); printf("选择方式: "); scanf("%d",&key2); switch(key2){ case 1: printf("查询的会员姓名:");scanf("%s",temp.name);result=SearchByName(list,temp.name);break; case 2:printf("查询的会员手机号码:");scanf("%s",temp.phonenumber);result=SearchByphonenumber(list,temp.phonenumber);break;default:break;}if(result==NULL){printf("----------未找到此会员----------\n");} else{printf("等级\t姓名\t性别\t手机号码\t生日\t\t商品1消费额\t商品2消费额\t商品3消费额\t总消费额\t积分\t偏好\t优惠券\n");printf("%c\t%s\t%s\t%s\t%d/%d/%d\t%d\t%d\t%d\t%d\t%d\t%s\t%s\n",result->data.rank,result->data.name,result->data.gender,result->data.phonenumber,result->data.link.year,result->data.link.month,result->data.link.day,result->data.cost.goods1cost,result->data.cost.goods2cost,result->data.cost.goods3cost,result->data.cost.totalcost,result->data.thing2.integral,result->data.thing2.likes,result->data.thing2.coupon);menuone();printf("请选择: ");int key3=0;scanf("%d",&key3);int cost;switch(key3){case 1:printf("新名字:"); char newname[10];scanf("%s",newname);strcpy(result->data.name,newname); saveInfo("numberInfo.txt",list);break;case 2:printf("新手机号码:");char newnumber[20];scanf("%s",newnumber);strcpy(result->data.phonenumber,newnumber); saveInfo("numberInfo.txt",list);break;case 3:printf("商品1新消费额:");scanf("%d",&cost);result->data.cost.goods1cost=cost;analysisplus(result);saveInfo("numberInfo.txt",list);break;case 4:printf("商品2新消费额:");scanf("%d",&cost);result->data.cost.goods2cost=cost;analysisplus(result); saveInfo("numberInfo.txt",list);break;case 5:printf("商品3新消费额:");scanf("%d",&cost);result->data.cost.goods3cost=cost;analysisplus(result);saveInfo("numberInfo.txt",list);break;default:break;}}break; case 4:printf("您选择的功能是 [删除会员信息] \n"); printf("等级\t姓名\t性别\t手机号码\t生日\t\t商品1消费额\t商品2消费额\t商品3消费额\t总消费额\t积分\t偏好\t优惠券\n"); showlist(list);printf("删除的会员的姓名:");scanf("%s",temp.name);deleteByname(list,temp.name); saveInfo("numberInfo.txt",list);break; case 5:printf("您选择的功能是 [会员消费奖励查询] \n"); printf("请选择以那种方式查找:\n"); printf("1.姓名查找\n"); printf("2.手机号码查找\n"); printf("选择方式: "); scanf("%d",&key2); switch(key2){ case 1: printf("查询的会员姓名:");scanf("%s",temp.name);result=SearchByName(list,temp.name);break; case 2:printf("查询的会员手机号码:");scanf("%s",temp.phonenumber);result=SearchByphonenumber(list,temp.phonenumber);break;default:break;}if(result==NULL){printf("----------未找到此会员----------\n");} else{printf("等级\t姓名\t性别\t手机号码\t生日\t总消费额\t积分\t偏好\t优惠券\n");printf("%c\t%s\t%s\t%s\t%d/%d/%d\t%d\t%d\t%s\t%s\n",result->data.rank,result->data.name,result->data.gender,result->data.phonenumber,result->data.link.year,result->data.link.month,result->data.link.day,result->data.cost.totalcost,result->data.thing2.integral,result->data.thing2.likes,result->data.thing2.coupon);}break; case 6:printf("您选择的功能是 [优质会员筛选] \n"); printf("等级\t姓名\t总消费额\t积分\n"); showlistplus(list);break; case 7: printf("您选择的功能是 [优质会员商品推荐] \n");printf("等级\t姓名\t总消费额\t积分\t偏好\n"); showlistplus2(list);break;case 8: printf("您选择的功能是 [速览会员信息] \n");printf("等级\t姓名\t性别\t手机号码\t生日\t\t商品1消费额\t商品2消费额\t商品3消费额\t总消费额\t积分\t偏好\t优惠券\n"); showlist(list);break;case 0: break;default:printf("选项不存在,请重新选择");break; } }