程序设计题九:电信优惠套餐推荐系统的设计与实现
1 问题描述
电信公司常常推出各种类型的优惠套餐,体现上上网流量、语音通话、资费上的各种优惠。要求设计一个优惠套餐推荐系统,将各种优惠套餐的情况存于文件中,系统提供办理业务的用户输入功能,主是提供自己希望得到的优惠,系统根据用户需求和已有套餐自动去匹配,挑选出最合适的套餐推荐给用户。
2 功能要求
系统中主要有管理员和普通用户两种身份的用户,二者各具有不同的功能:
管理员:
(1)以密码登录系统(密码用*显示,不得显示输入的字符)
(2)管理优惠套餐(同学自己参考电信移动公司的优惠政策)的具体信息,主要包括:优惠套餐编号(主关键字,唯一)月资费、通话时长、4G流量、宽带带宽等。管理员可以增加、删除、修改具体优惠套餐的信息
(3)可以管理并查询所有用户所享受的优惠套餐政策
普通用户:
(1) 逐条输入(或根据选项来选择)自己希望享受的各优惠条件,具体到每月通话时常、4G流量需求,是否需要宽带等;
(2)在系统给出推荐的优惠套餐之后,进行确认
(3)可以随时查询本人的优惠套餐具体信息,可根据需要提出变更需求,系统再为其重新计算和推荐。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#define Max_Size 100/*定义数组长度*/
typedef struct _USER_Info/*记录管理员及用户账户*/
{
int flag;/*区分用户和管理员 1代表用户 0代表管理员*/
int no;/*优惠套餐编号*/
char user_count[20];/*账户(字符串)*/
char user_code[20];/*密码*/
}USER,*PUSER;
typedef struct _Combo/*记录套餐信息*/
{
int no;/*套餐编号*/
float no_price;/*月资费*/
int second;/*通话时长*/
float flux_4g;/*4g流量*/
int band_with;/*宽带带宽*/
}Combo,*PCombo;
/*
*函数功能:注册用户
*参数1:PUSER user 传递用户数组首地址
*参数2:int* n 传递数组长度变量地址
*/
void User_Regest(PUSER user,int* n)
{
system("cls");//清屏
user[*n].flag=1;//设置权限为用户
user[*n].no=-1;//未选择套餐
printf("请输入用户账号:");
scanf("%s",user[*n].user_count);//直接加入到数组尾部 *n为数组最后一个元素
printf("请输入用户密码:");
scanf("%s",user[*n].user_code);
printf("注册成功!\n");
system("pause");//暂停
(*n)++;//数组长度+1
}
/*
*函数功能:注册管理员
*参数1:PUSER user 传递用户数组首地址
*参数2:int* n 传递数组长度变量地址
*/
void Admin_Red(PUSER user,int* n)
{
system("cls");
user[*n].flag=0;//设置权限为管理员 其它和注册用户相同
printf("请输入管理员账号:");
scanf("%s",user[*n].user_count);
printf("请输入管理员密码:");
scanf("%s",user[*n].user_code);
printf("注册成功!\n");
system("pause");
(*n)++;
}
/*
*函数功能:输入账号密码登录
*参数1:PUSER user 传递用户数组首地址
*参数2:int n 传递数组长度
*返回值:-3代表登录失败
*返回值:[0,n-1]中的任意一个 代表登录成功的用户或管理员数组下标
*/
int Log_In(PUSER user,int n)
{
int i;
char name[20],code[20];//记录账号密码
system("cls");
printf("请输入账号:");
scanf("%s",name);
fflush(stdin);//情况输入流 避免读取回车
printf("请输入密码:");
i=0;