记账程序练习

使用一维数组函数指针编程实现一个控制台程序记账系统V1.0。在系统中每个用户有一个唯一IDID5位数字组成,用户人数不超过10人。系统功能如下:

1. 录入用户 ID ,本月收入,本月支出(收入和支出均为整数)
2. 采用 选择排序法 将支出降序排列后输出记账信息
3. 采用 选择排序法 将支出升序排列后输出记账信息
4. 采用 冒泡排序法 将收入升序排列后输出记账信息
5. 采用 折半查找法 使用用户 ID 查询特定用户本月的记账信息
6. 找出所有支出大于收入的用户记账信息
7. 输出系统中所有的记账信息(按 ID 升序)

        0.  退出系统

#include <stdio.h>
#include <stdlib.h>
int Menu(int choice);
int InputRecord(int id[],int in[],int ex[]);
void SSortDescendExpenses(int id[],int in[],int ex[],int count);
void SSortAscendExpenses(int id[],int in[],int ex[],int count);
void BSortAscendIncome(int id[],int in[],int ex[],int count);
void SearchRecordID(int id[],int in[],int ex[],int count);
void ListRecord(int id[],int in[],int ex[],int count);
void ListAllRecords(int id[],int in[],int ex[],int count);
int Search(int id[],int count);
int main()
{
    int choice=1,count=0;
    static int id[10],in[10],ex[10];
    choice=Menu(choice);
    while(choice!=0)
    {
        switch(choice)
        {
            case 1:count=InputRecord(id,in,ex);choice=Menu(choice);break;
            case 2:SSortDescendExpenses(id,in,ex,count);choice=Menu(choice);break;
            case 3:SSortAscendExpenses(id,in,ex,count);choice=Menu(choice);break;
            case 4:BSortAscendIncome(id,in,ex,count);choice=Menu(choice);break;
            case 5:SearchRecordID(id,in,ex,count);choice=Menu(choice);break;
            case 6:ListRecord(id,in,ex,count);choice=Menu(choice);break;
            case 7:ListAllRecords(id,in,ex,count);choice=Menu(choice);break;
        }
    }
    return 0;
}
int Menu(int choice)
{
    int ret;
    printf("1.Input record\n2.Selection Sort in descending order by expenses\n3.Selection Sort in ascending order by expenses\n4.Bubble Sort in ascending order by income\n5.Search records by ID using Binary Search\n6.List records which have more expenses than income\n7.List all records\n0.Exit\n  Please enter your choice:");
    ret=scanf("%d",&choice);
    while((ret<0)||(ret>7))
    {
        while(getchar()!='\n');//记得看一下能不能运行 不行就去掉引号
        printf("Please enter your choice:");
        ret=scanf("%d",&choice);
    }
    return choice;
}
int InputRecord(int id[],int in[],int ex[])
{
    int i,count=0;
    printf("Please input:\n");
    for(i=0;i<=9;i++)
    {
        scanf("%d,%d,%d",&id[i],&in[i],&ex[i]);
        if ((id[i]==-1)||(in[i]==-1)||(ex[i]==-1))
            break;
        count++;
    }
    return count;
}
void SSortDescendExpenses(int id[],int in[],int ex[],int count)
{
    int i,j,k,temp;
    printf("\n%d\n",count);
    for (i=0;i<count-1;i++)
    {
        k=i;
        for (j=i+1;j<count;j++)
            if (ex[j]>ex[k])
                k=j;
        if(k!=i)
        {
            temp=ex[k];ex[k]=ex[i];ex[i]=temp;
            temp=in[k];in[k]=in[i];in[i]=temp;
            temp=id[k];id[k]=id[i];id[i]=temp;
        }
    }
    printf("ID        Income    Expenses\n");
    for (i=0;i<count;i++)
        printf("%-9d %-9d %-9d\n",id[i],in[i],ex[i]);
}
void SSortAscendExpenses(int id[],int in[],int ex[],int count)
{
    int i,j,k,temp;
    printf("\n%d\n",count);
    for (i=0;i<count-1;i++)
    {
        k=i;
        for (j=i+1;j<count;j++)
            if (ex[j]<ex[k])
                k=j;
        if(k!=i)
        {
            temp=ex[k];ex[k]=ex[i];ex[i]=temp;
            temp=in[k];in[k]=in[i];in[i]=temp;
            temp=id[k];id[k]=id[i];id[i]=temp;
        }
    }
    printf("ID        Income    Expenses\n");
    for (i=0;i<count;i++)
        printf("%-9d %-9d %-9d\n",id[i],in[i],ex[i]);
}
void BSortAscendIncome(int id[],int in[],int ex[],int count)
{
    int i,j,temp;
    for (j=count-1;j>=2;j--)
    {
        for (i=0;i<j;i++)
        {
            int k=i+1;
            if(in[i]>in[i+1])
            {
                temp=ex[k];ex[k]=ex[i];ex[i]=temp;
                temp=in[k];in[k]=in[i];in[i]=temp;
                temp=id[k];id[k]=id[i];id[i]=temp;
            }
        }
    }
    printf("ID        Income    Expenses\n");
    for (i=0;i<count;i++)
        printf("%-9d %-9d %-9d\n",id[i],in[i],ex[i]);
}
void SearchRecordID(int id[],int in[],int ex[],int count)
{
    int i,j,temp,ID=-1;
    for (j=count-1;j>=2;j--)
    {
        for (i=0;i<j;i++)
        {
            int k=i+1;
            if(in[i]>in[i+1])
            {
                temp=ex[k];ex[k]=ex[i];ex[i]=temp;
                temp=in[k];in[k]=in[i];in[i]=temp;
                temp=id[k];id[k]=id[i];id[i]=temp;
            }
        }
    }
    while(ID==-1)
        ID=Search(id,count);
    printf("ID        Income    Expenses\n");
    printf("%-9d %-9d %-9d\n",id[ID],in[ID],ex[ID]);
}
void ListRecord(int id[],int in[],int ex[],int count)
{
    int i;
    printf("ID        Income    Expenses\n");
    for(i=0;i<=count;i++)
        if (ex[i]>in[i])
            printf("%-9d %-9d %-9d\n",id[i],in[i],ex[i]);
}
void ListAllRecords(int id[],int in[],int ex[],int count)
{
    BSortAscendIncome(id,in,ex,count);
}
int Search(int id[],int count)
{
    int low=0,high=count,mid,ID=-1;
    printf("Please input ID:\n");
    scanf("%d",&ID);
    while (low<=high)
    {
        mid=(high+low)/2;
        if(ID>id[mid])
            low=mid+1;
        else if(ID<id[mid])
            high=mid-1;
        else
            return mid;
    }
    return -1;
}

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值