博主首次文件作业尝试

很久没更新博客了


 

 

 最近也是有很多很多的问题,无论是学习上的还是生活上的

但毕竟生活就是问题叠着问题

生活总会前进的


 

今天终于完成了小组的文件作业

全篇100%自己手写

(拥有100%的知识产权)

相当于是自己的一次锻炼了

纪念一下第一次的文件作业~

#include <bits/stdc++.h>
#define endl '\n'
#define x first
#define y second
#define int long long
#define SugarT ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);

using namespace std;

const int N=1e3+10; //定义宏会员人数
const int INF=0x3f3f3f3f;
const int mod=1e9+7;
const double eps = 1e-6;

int n,choice;
typedef pair<string, int> PII;
map<string,int> now;    //当前账户的金额
map<string,int> modify_in;      //累计充值金额
map<string,int> modify_out;     //累计消费金额
vector<string> Namebook;    //花名册
PII temp[N];

bool cmp(PII x,PII y)    //将temp进行排序处理(结构体自定义排序)
{
    if(x.second==y.second)
        return x.first>y.first;
    return x.second>y.second;
}

void Creat()
{
    printf("请输入会员录入人数\n");
    printf("格式为:姓名 初始充值金额\n");
    
    cin >> n;
    for(int i=0;i<n;i++)
    {
        string name;
        int money;
        cin >> name >> money;
        modify_in[name]=money;  //初始金额即为初始充值金额
        Namebook.push_back(name);   //将初始名字存进花名册
        now[name]=money;    //充值金额即为当前余额
    }
    
    printf("会员信息录入完毕!\n");
}

void Query_Ranking()
{
    printf("会员现存金额排行显示如下\n");
    int k=0;
    
    for(map<string,int>::iterator it=now.begin();it!=now.end();it++)    //转入temp数组进行排序处理
        temp[k++]=make_pair(it->first,it->second);
    
    sort(temp,temp+now.size(),cmp);
    for(int i=0;i<now.size();i++)   //输出降序排序结果
        cout << temp[i].x << " " << temp[i].y << endl;
    
    printf("显示完毕!\n");
}

void In()
{
    int money;
    string name;
    printf("请输入会员名称以及充值金额\n");
    printf("格式为:姓名 充值金额\n");
    
    cin >> name >> money;
    now[name]+=money;
    modify_in[name]+=money;     //充值累计存入当前金额
    
    printf("会员充值操作进行完毕!\n");
    printf("信息更新成功!\n");
    cout << name << " 当前剩余金额为 " << now[name] << endl;
}

void Out()
{
    int money;
    string name;
    printf("请输入会员名称以及消费金额\n");
    printf("格式为:姓名 消费金额\n");

    cin >> name >> money;
    now[name]-=money;
    modify_out[name]+=money;     //消费累计存入当前金额
    
    printf("会员消费操作进行完毕!\n");
    printf("信息更新成功!\n");
    cout << name << " 当前剩余金额为 " << now[name] << endl;
}

void Kill()
{
    printf("请输入需要注销的会员名称\n");
    string name;
    cin >> name;
    
    modify_in[name]=0;
    modify_out[name]=0;     //消费、充值金额全部归零
    for(vector<string>::iterator iter=Namebook.begin();iter!=Namebook.end();iter++)
    {        
        if(*iter==name)
        {
            Namebook.erase(iter);   //遍历到ID,删除
            break;
        }
    }
    
    printf("该会员注销操作完成!\n");
    
}

void Query_Name()
{
    for(vector<string>::iterator it=Namebook.begin();it!=Namebook.end();it++)   //遍历花名册输出
        cout<<*it<<endl;
    cout << endl;
}

void Query_Money()
{
    printf("请输入想要查询会员的名称\n");
    string name;
    
    cin >> name;
    cout << name << " 当前剩余金额为 " << now[name] << endl;    //输出当前余额即可
    
}

void Query_In()
{
    printf("会员累计充值金额排行显示如下\n");
    int k=0,ord=0,mid=0,adv=0;
    
    for(map<string,int>::iterator it=modify_in.begin();it!=modify_in.end();it++)//转入temp数组进行排序处理
    {
        temp[k++]=make_pair(it->first,it->second);      //统计三个阶段的人数
        if(it->second<=100) ord++;
        else if(it->second>=700) adv++;
        else mid++;
    }
    
    sort(temp,temp+modify_in.size(),cmp);
    if(adv)
    {
        printf("高级会员:\n");
        for(int i=0;i<adv;i++)
            cout << temp[i].x << " " << temp[i].y << endl;
    }
    if(mid)
    {
        printf("中级会员:\n");
        for(int i=adv;i<adv+mid;i++)
            cout << temp[i].x << " " << temp[i].y << endl;
    }
    if(ord)
    {
        printf("普通会员:\n");
        for(int i=adv+mid;i<modify_in.size();i++)
            cout << temp[i].x << " " << temp[i].y << endl;
    }
    
    printf("显示完毕!\n");
}

void Query_Out()
{
    int k=0,money;
    int num=modify_out.size()/10;   //确定返还金额的人数
    printf("会员累计消费金额排行显示如下\n");
    
    for(map<string,int>::iterator it=modify_out.begin();it!=modify_out.end();it++)//转入temp数组进行排序处理
        temp[k++]=make_pair(it->first,it->second);
    
    sort(temp,temp+modify_out.size(),cmp);
    for(int i=0;i<modify_out.size();i++)   //输出降序排序结果
        cout << temp[i].x << " " << temp[i].y << endl;
    if(num)
        printf("消费金额在前10%的顾客共有%d位,将会返回消费金额的10%\n",num);
    else
        printf("人数不满足返回条件,系统将自动选择消费金额最高的会员返回消费金额的10%\n"),num++;
        
    printf("返还名单及返还金额如下\n");
    for(int i=0;i<num;i++)
    {
        money=temp[i].y*5/100;
        cout << temp[i].x << " 返还金额为 " << money << endl;
        now[temp[i].x]+=money;
        modify_in[temp[i].x]+=money;    //将返还金额存入余额以及充值金额中
    }
    
    printf("显示完毕!\n");
}

void End()
{
    fstream File;
    File.open("d:\\Membership_Management_System.txt",ios::out|ios::app);
    int k=0;
    for(map<string,int>::iterator it=now.begin();it!=now.end();it++)    //转入temp数组进行排序处理
        temp[k++]=make_pair(it->first,it->second);
    sort(temp,temp+now.size(),cmp);
    for(int i=0;i<now.size();i++)   //输出降序排序结果
        File << temp[i].x << " " << temp[i].y << endl;
    File.close();
    printf("会员信息以储存至 D:\\Membership_Management_System.txt 中\n");
    printf("期待您下次使用!");
}

void Membership_Management_System()
{
    
    system("cls");  //系统命令:清除控制台显示的内容
    system("color f0"); //系统命令:设置控制台背景颜色
    
    
    printf("您好,欢迎使用会员管理系统!\n");
    printf("请根据您的需求选择对应的功能\n");
    printf("1.会员信息录入  2.会员排行榜  3.会员充值\n");
    printf("4.会员消费    5.会员注销    6.会员花名册\n");
    printf("7.会员余额查询  8.上月充值金额排行  9.上月消费金额排行\n");
    printf("0.退出系统");
    
    printf("请输入您的选择\n");
    fflush(stdin);  //刷新输入缓冲区,清除缓冲区内容
        
    while(cin >> choice)
    {
                //进行选择判断
        if(!choice)   
        {
            End();
            return;
        }
        else if(choice==1)
            Creat();
        else if(choice==2)
            Query_Ranking();
        else if(choice==3)
            In();
        else if(choice==4)
            Out();
        else if(choice==5)
            Kill();
        else if(choice==6)
            Query_Name();
        else if(choice==7)
            Query_Money();
        else if(choice==8)
            Query_In();
        else if(choice==9)
            Query_Out();
            
    }
    
}

signed main()
{
    
    int T=1;
        //cin >> T;
    while(T--)
        Membership_Management_System();
    
    return 0;
        
}
//  https://paste.ubuntu.com/p/qPtJzWDrKr/

 

posted @ 2022-04-20 22:49  MrSugarT  阅读(114)  评论(0编辑  收藏  举报