| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 366 人关注过本帖
标题:怎么对文件里面的内容排序后输出啊~~求大神帮忙、、
只看楼主 加入收藏
覃华
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2012-8-24
结帖率:50%
收藏
已结贴  问题点数:5 回复次数:6 
怎么对文件里面的内容排序后输出啊~~求大神帮忙、、
小弟正在做一个小程序,就是用c同时用文件来编的一个工资管理系统,但是其中的排序部分真的不知道怎么做了。具体内容是根据来基本工资排序,然后输出其他内容,比如说工号,姓名。
程序代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>


struct node
{
    int id;
    char name[10];
    char Sex[5];
    char pos[10];
    int basic_sarary;
    int reward;
    int add_time_sarary;
    char tips[10];
};


void js();           // 系 统 介 绍
void cw();           // 从 属 系 统 程 序 介 绍
void add();          // 添 加
void del();          // 删 除
void alter();        // 修 改
void Findin();       // 查 询
void display();      // 显 示
void End();          // 退 出
void menu();         // 菜 单


// 主 函 数
void main()
{

    printf("\n\n\n\n");
    printf("\t\t\t     \4 欢 迎 使 用 本 系 统\n\n\n");
    printf("\t\t┏┯┯┯┯┯┯┯┯┯┯┯┯┯┯┯┯┯┯┯┯┯┯┓");
    printf("\t\t\t\t┣┙\t杰宇广告公司职工工资信息管理系统    ┕┫");
    printf("\n\n\n");
    printf("\t\t┣┑         请按任意键进入系统主页面       ┍┫\n");
    printf("\t\t┗┷┷┷┷┷┷┷┷┷┷┷┷┷┷┷┷┷┷┷┷┷┷┛\n\n\n");
    printf("\t\t\4 请 按 任 意 键 继 续 !\n\n");
    printf("\t\t\4 亲,进入界面后记得按要求操作噢! !\n\n\n");
    getch();
    menu();
}



// 主 菜 单
void menu()
{
    int choice;
    system("cls");
    printf("\n");
    printf("\n");
    printf("\t \t★ ★ ★ ★ ★ 信 息 管 理 系 统 ★ ★ ★ ★ ★\n\n\n");
    printf("\t \t      ~~~职工信息管理系统菜单如下:~~~\n\n");
    printf("\t \t ☆.......1......系 统 程 序 介 绍...........\n\n");
    printf("\t \t ☆.......2......添 加 职 工 信 息...........\n\n");
    printf("\t \t ☆.......3......删 除 职 工 信 息...........\n\n");
    printf("\t \t ☆.......4......修 改 职 工 信 息...........\n\n");   
    printf("\t \t ☆.......5......查 询 职 工 信 息...........\n\n");
    printf("\t \t ☆.......6......显 示 职 工 信 息...........\n\n");
    printf("\t \t ☆.......7......退 出 应 用 程 序...........\n\n");
    printf("\t \t 请选择相应的功能代号:");
    scanf("%d",&choice);
    switch(choice)
    {
        case 1:
            js();
            break;
        case 2:
            add();
            break;
        case 3:
            del();
            break;
        case 4:
            alter();
            break;
        case 5:
            Findin();
            break;
        case 6:
            display();
            break;
        case 7:
            End();
            break;
        default:
            printf("\n\t\t\t\t 输入无效,请您重新输入?\n");
            printf("\n\t\t\t\t 请选择相应的功能代号:");
            scanf("%d",&choice);
            getch();
            system("cls");
            menu();
    }
}


// 1 系 统 程 序 介 绍
void js()
{
    system("cls");
    printf("\n\n\t\t\t\t系统程序介绍\n\n\n");
    printf("\t\t\t\3 这是一个职工工资信息管理系统,\n\n\n");
    printf("\t\t\t\3 可以对职工的信息进行增,删,改,查!\n\n\n");
    printf("\t\t\t\3 它能够快速的统计工资信息,\n\n\n");
    printf("\t\t\t\3 节省工作时间,提高工作效率。");
    printf("\n\n");
    char choice;
    printf("\n您想返回主菜单吗?(y/n)");
    scanf(" %c",&choice);
    if(choice=='Y'||choice=='y')
    {
        menu();
    }
    else
    {
        system("cls");
        cw();
    }
}



// 从 属 系 统 程 序 介 绍
void cw()
{
    system("cls");
    printf("\n\n\n\n\n\n\n\t\t\t\t 操作错误啦!\n\n");
    printf("\t\t\t\t 不能在继续了!!");
    char choice;
    printf("\n\n\t\t\t\t返回主菜单请按(Y/y)");
    printf("\n\n\t\t\t\t返回系统程序介绍请按(N/n)");
    scanf(" %c",&choice);
    if(choice=='Y'||choice=='y')
    {
        menu();
    }
    else
    {
        system("cls");
        js();
    }
}


// 2 添 加 职 工 信 息
void add()
{
    fflush(stdin);
    system("cls");
    printf("\n\n\n\n\t\t\t\t添 加 职 工 信 息 模 块\n\n\n");
    FILE *fp;
    fp=fopen("node.txt","ab");
    if(fp==NULL)
    {
        printf("\t\t\t无工资信息,请重试!");
        exit(1);
    }
    node i;
    printf("\n\t请您输入要添加的职工的信息:\n\n");
    printf("\t\t\t\t   职工工号:");
    scanf("%d",&i.id);
    printf("\n");
    printf("\t\t\t\t   姓名:");
    scanf("%s",i.name);
    printf("\n");
    printf("\t\t\t\t   性别:");
    scanf("%s",i.Sex);
    printf("\n");
    printf("\t\t\t\t   职位:");
    scanf("%s",i.pos);
    printf("\n");
    printf("\t\t\t\t   基本工资:");
    scanf("%d",&i.basic_sarary);
    printf("\n");
    printf("\t\t\t\t   奖金:");
    scanf("%d",&i.reward);
    printf("\n");
    printf("\t\t\t\t   加班费:");
    scanf("%d",&i.add_time_sarary);
    printf("\n");
    printf("\t\t\t\t   备    注:");
    scanf("%s",i.tips);
    printf("\n");
    fwrite(&i,sizeof(struct node),1,fp);
    fclose(fp);
    printf("\n\n\t\t\t\t工资信息已成功保存!!!\n");
    char choice;
    printf("\n\t\t\t\t您想继续添加吗?(y/n)");
    scanf(" %c",&choice);
    if(choice=='Y'||choice=='y')
    {
        add();
    }
    else
    {
        system("cls");
        menu();
    }
   
}

// 3 删 除 职 工 信 息
void del()
{
    system("cls");
    printf("\n\n\n\t\t\t删 除 职 工 信 息 模 块\n\n\n");
    FILE *fp;
    fp=fopen("node.txt","r");
    if((fp=fopen("node.txt","r"))==NULL)
    {
        printf("\n\n\n\n");
        printf("\t\t\t没有记录!\n\n");
        printf("\t\t\t请按任意健返回!!");
        menu(); 
    }
    node i[10];
    node temp;
    int index=0;
    fread(&temp,sizeof(struct node),1,fp);
    while(!feof(fp))
    {
        i[index]=temp;
        index++;
        fread(&temp,sizeof(struct node),1,fp);
    }
    fclose(fp);
    int delID;
    printf("\n\t请输入要删除的职工的工号:");
    scanf("%d",&delID);
    fopen("node.txt","w");
    if(fp==NULL)
    {
        printf("\t\t\t无工资信息,请您重试!");
        exit(1);
    }
    for(int j=0;j<index;j++)
    {
        if(i[j].id!=delID)
        {
            fwrite(&i[j],sizeof(struct node),1,fp);
        }
    }
    fclose(fp);
    printf("\t\t\t\t\t工资信息已清除!!!\n");
    char choice;
    printf("\n\t\t\t\t 您,想继续吗?(y/n)");
    scanf(" %c",&choice);
    if(choice=='Y'||choice=='y')
    {
        system("cls");
        del();
    }
    else
    {
        system("cls");
        menu();
    }
}


// 4 修 改 职 工 信 息
void alter()
{
    system("cls");
    printf("\n\n\n\t\t\t\t修 改 职 工 信 息 模 块\n\n\n");
    FILE *fp;
    fp=fopen("node.txt","r");
    if(fp==NULL)
    {
        printf("\t\t\t无工资信息,请您重试!");
        exit(1);
    }
    node i[10];
    node temp;
    int index=0;
    fread(&temp,sizeof(struct node),1,fp);
    while(!feof(fp))
    {
        i[index]=temp;
        index++;
        fread(&temp,sizeof(struct node),1,fp);
    }
    fclose(fp);
    fp=fopen("node.txt","w");
    if(fp==NULL)
    {
        printf("\\t\t\t无工资信息,请您重试!");
        exit(1);
    }
    int ID,j;
    printf("\n\t请输入要修改的职工工号:");
    scanf("%d",&ID);
    for(j=0;j<=index-1;j++)
    {
        if(i[j].id!=ID)
        {
            fwrite(&i[j],sizeof(struct node),1,fp);
        }
        else
        {
            printf("\n\n");
            printf("\t\t姓 名:");
            scanf("%s",i[j].name);
            printf("\t\t性 别:");
            scanf("%s",i[j].Sex);
            printf("\t\t职 位:");
            scanf("%s",i[j].pos);
            printf("\t\t基本工资:");
            scanf("%d",&i[j].basic_sarary);
            printf("\t\t奖 金:");
            scanf("%s",&i[j].reward);
            printf("\t\t加班费:");
            scanf("%d",&i[j].add_time_sarary);
            printf("\t\t备   注:");
            scanf("%s",i[j].tips);
            fwrite(&i[j],sizeof(struct node),1,fp);
        }
    }
    fclose(fp);
    printf("\t\t\t\t工资信息已修改!");
    char choice;
    printf("\n\t\t\t\t您想继续修改吗?(y/n)");
    scanf(" %c",&choice);
    if(choice=='Y'||choice=='y')
    {
        alter();
    }
    else
    {
        system("cls");
        menu();
    }
}

// 5 查 询 职 工 信 息
void Findin()
{
    system("cls");
    findID:
    printf("\n\n\n\t\t\t\t查 询 职 工 信 息 模 块\n\n\n");
    FILE *fp;
    fp=fopen("node.txt","r");
    if(fp==NULL)
    {       
        printf("\t\t\t无工资信息,请重试!\n");
        exit(1);
    }
    int findID;
    printf("\n\t请输入要查询的工资工号:");
    scanf("%d",&findID);
    node i;
    fread(&i,sizeof(struct node),1,fp);
    char choice;
    while(!feof(fp))
    {
        if(i.id==findID)
        {
            printf("\n\t\t\t **********职 工 信 息***********\n\n");
            printf("\n\t\t\t --------------------------------");
            printf("\n\t\t\t 工 号:%10d",i.id);
            printf("\n\t\t\t --------------------------------");
            printf("\n\t\t\t 姓 名:%10s",i.name);
            printf("\n\t\t\t --------------------------------");
            printf("\n\t\t\t 性 别:%10s",i.Sex);
            printf("\n\t\t\t --------------------------------");
            printf("\n\t\t\t 职 位:%10s",i.pos);
            printf("\n\t\t\t --------------------------------");
            printf("\n\t\t\t 基 本 工 资:%10d",i.basic_sarary);
            printf("\n\t\t\t --------------------------------");
            printf("\n\t\t\t 职 工 奖 金:%10d",i.reward);
            printf("\n\t\t\t --------------------------------");
            printf("\n\t\t\t 加 班 费:%10d",i.add_time_sarary);
            printf("\n\t\t\t --------------------------------");
            printf("\n\t\t\t 备  注:%10s",i.tips);
            printf("\n\t\t\t --------------------------------");
            printf("\n\n\t\t您还想继续吗?(y/n)");
            scanf(" %c",&choice);
            if(choice=='Y'||choice=='y')
            {
                Findin();
            }
            else
            {
                system("cls");
                menu();
            }
        }
        fread(&i,sizeof(struct node),1,fp);
    }
    fclose(fp);
    printf("\t\t\t\t\t输入的工号不存在,请您重新输入!");
    printf("\n\t\t\t\t您还想继续吗?(y/n)");
            scanf(" %c",&choice);
    if(choice=='Y'||choice=='y')
            {
                Findin();
            }
            else
            {
                system("cls");
                menu();
            }
    goto findID;

}

// 6 显 示 职 工 信 息
void display()
{
    fflush(stdin);
    system("cls");
    FILE *fp;
    fp=fopen("node.txt","rb");
    if((fp=fopen("node.txt","rb"))==NULL)
    {
        fclose(fp);
        printf("\t\t\t无工资信息,请重试!");
        exit(1);
    }
    node i;
    fread(&i,sizeof(struct node),1,fp);
    printf("\n\n\n\t\t\t显 示 职 工 信 息 模 块\n\n");
    int index=0;
    while(!feof(fp))
    {
        fflush(stdin);
        index++;
        printf("\n\t\t * * * * * * * 职 工 信 息 * * * * * * * \n\n",index);
        printf("\n\t\t-----------------------------------------");
        printf("\n\t\t\t工 号:%10d\n",i.id);
        printf("\n\t\t-----------------------------------------");
        printf("\n\t\t\t姓 名:%10s\n",i.name);
        printf("\n\t\t-----------------------------------------");
        printf("\n\t\t\t性 别:%10s\n",i.Sex);
        printf("\n\t\t-----------------------------------------");
        printf("\n\t\t\t职 位:%10s\n",i.pos);
        printf("\n\t\t-----------------------------------------");
        printf("\n\t\t\t基 本 工 资:%10.1d\n",i.basic_sarary);
        printf("\n\t\t-----------------------------------------");
        printf("\n\t\t\t奖  金:%10d\n",i.reward);
        printf("\n\t\t-----------------------------------------");
        printf("\n\t\t\t加 班 费:%10d\n",i.add_time_sarary);
        printf("\n\t\t-----------------------------------------");
        printf("\n\t\t\t备  注:%10s\n",i.tips);
        printf("\n\t\t-----------------------------------------");
        getch();
        fread(&i,sizeof(struct node),1,fp);
    }
    fclose(fp);
    char choice;
    printf("\n\t\t\t\t 您还想继续吗?(y/n)");
    scanf(" %c",&choice);
    if(choice=='Y'||choice=='y')
    {
        system("cls");
        display();
    }
    else
    {
        system("cls");
        menu();
    }
}

// 8 退 出 应 用 程 序
void End()
{
    system("cls");
    char choice;
    printf("\n\n\n\n\n\n\n");
    printf("\t\t\3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 

\t\t");
    printf("\n\t\t\3\t\t你确定要退出系统吗?                  \3\n");
    printf("\n\t\t\3\t 如果你想退出请按'y',其它键将返回主菜单!     \3\n\n");
    printf("\t\t\3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 

\t\t");
    printf("\n");
    printf("\n\t\t\t\t 您还想继续吗?(y/n)");
    scanf(" %c",&choice);
    if(choice=='Y'||choice=='y')
    {
        system("cls");
        printf("\n\n\n\n\n\n\n\t\t\t   感 谢 您 的 使 用 !!!\n\n");
   
        printf("\n\n\t\t\t ¤¤ !欢 迎 再 次 使 用 !¤¤\n\n\n\n");
    }
    else
    {
        menu();
    }
}

时间有点紧,所以请各位帮帮小弟吧。。
搜索更多相关主题的帖子: 管理系统 
2012-12-15 15:11
小小战士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:569
专家分:1313
注 册:2012-11-3
收藏
得分:0 
我看你每个函数都是打开文件关闭文件,这样费时费力且容易混乱,各个模块之间没有太大的联系,对于一个实用性系统来说它肯定不希望这样
由于文件是对数据进行保存的,固然不希望任何数据得到无意识的改变,也就是对文件多次操作会带来文件中数据错误的很大隐患,所以我建议你用链表操作文件,实现一次导入一次导出的目的,安全性能也会得到很大程度的改善,而且增加修改删除查询排序都是对链表进行操作,都很容易实现,这才是一个系统所具备的优良传统!
直接打开文件进行排序,我没这样做过,要不比较以后保存到一个缓冲区最后写入文件,要不比较以后用fseek定位要交换的文件数据位置进行写,总之我想这样会很麻烦!

小小战士,战士中的战斗机!
2012-12-15 15:32
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:1 
自己写了一个排序的,参考一下吧
程序代码:
#include <time.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define N 10
struct node
{
    char name[N + 1];
    int age;
};
void init(node a[])
{
    int i;
    srand(time(0));
    for (i = 0;i < N;i++)
    {
        strcpy(a[i].name, "asdfghjkl;");
        a[i].name[i] = i + '0';
        a[i].age = rand() % 15;
    }
}
void Swap1(node *a, node *b)
{
    int i, s;
    char temp[N + 1];
    strcpy(temp, a->name);
    for (i = 0;i <= N && b->name[i];i++)a->name[i] = b->name[i];
    for (i = 0;i <= N && temp[i];i++)b->name[i] = temp[i];
    s = a->age, a->age = b->age, b->age = s;
}
void Sort(node a[])
{
    int i, j;
    for (i = 0;i < N - 1;i++)
    for (j = i + 1;j < N;j++)
    if (a[i].age < a[j].age)
        Swap1(&a[i], &a[j]);
}
void Out(node a[])
{
    int i;
    for (i = 0;i < N;i++)
        printf("%2dth : name :%s\tage :%2d\n", i + 1, a[i].name, a[i].age);
    puts("");
}
void main()
{
    node person[N];
    init(person);
    Out(person);
    Sort(person);
    Out(person);
}


[fly]存在即是合理[/fly]
2012-12-15 15:55
覃华
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2012-8-24
收藏
得分:0 
回复 2楼 小小战士
最开始的时候也是想着要用链表,可是因为每次运行的时候,都还要输入数据,而文件就不用,介于这个我才用了文件。是小弟学得还不够深入吧。那么如果用链表怎么做呢??其实这个源代码不是自己写的,我是从网上找的,然后自己改了就成这样了。但是少了排序这项功能。所以很痛疼啊、、请大神帮帮小弟吧。。
2012-12-15 18:41
覃华
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2012-8-24
收藏
得分:0 
回复 3楼 azzbcc
不好意思,这个代码我看了一下,没看懂。。呵呵,毕竟我不是学这个专业的。。
2012-12-15 18:42
小小战士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:569
专家分:1313
注 册:2012-11-3
收藏
得分:4 
以下是引用覃华在2012-12-15 18:41:42的发言:

最开始的时候也是想着要用链表,可是因为每次运行的时候,都还要输入数据,而文件就不用,介于这个我才用了文件。是小弟学得还不够深入吧。那么如果用链表怎么做呢??其实这个源代码不是自己写的,我是从网上找的,然后自己改了就成这样了。但是少了排序这项功能。所以很痛疼啊、、请大神帮帮小弟吧。。


用链表,在程序运行的时候就把文件的数据导入到系统中,以后的增加修改删除查询排序都是对链表进行操作,这个链表是每个模块公用的,谁都可以操作,程序运行退出时在保存到文件,省时省力安全性高

小小战士,战士中的战斗机!
2012-12-15 18:47
覃华
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2012-8-24
收藏
得分:0 
回复 6楼 小小战士
小弟的水平有限,只是浅学了一下c,你说的链表我还是不太清楚。不过还是谢谢你啦。
2012-12-16 17:09
快速回复:怎么对文件里面的内容排序后输出啊~~求大神帮忙、、
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023348 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved