| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 477 人关注过本帖
标题:C语言的问题,用C语言实现某公司销售信息的管理。代码错了,帮忙改下。哪里 ...
取消只看楼主 加入收藏
流逝
Rank: 1
等 级:新手上路
帖 子:3
专家分:4
注 册:2014-12-14
结帖率:0
收藏
已结贴  问题点数:20 回复次数:1 
C语言的问题,用C语言实现某公司销售信息的管理。代码错了,帮忙改下。哪里错了请标注一下。
程序代码:

#ifndef H_STUDENT_HH 
#define H_STUDENT_HH 

#include "stdio.h" 
#include "string.h" 
#include "malloc.h" 


#define LEN sizeof(struct message_student) /*一个结构体数组元素的长度*/ 
typedef struct message_student /*结构体定义*/
{
    char number[6];
    char name[20];
    float subject1;
    float subject2;
    float sum;
    int index;
}student;

extern student *pointer; /*指向结构体数组,外部变量*/
extern int lens;



int menu_select(); /*函数声明*/
int openfile(student stu[]);
int findrecord(student stud[]);
int writetotext(student stud[]);
void welcome();
void display1();
void showtable();
void sort(student stu[]);
void deleterecord(student stu[], int i);
void addrecord(student stud[]);
void display(student stud[], int n1, int n2);
void amendrecord(student stud[]);
void count(student stud[]);
void sortnum(student stud[]);
void sortnum2(student stud[]);
void sortname(student stud[]);
void sortname2(student stud[]);
void sortcount(student stud[]);
void sortcount2(student stud[]);
void statistic(student stud[]);
void display1();

#endif 

//#include "head.h" 
int menu_select()
{
    char c;
    printf("\n\n");
    printf(" | 1. 增加销售员记录      5.统计信息 |\n");
    printf(" | 2. 查询销售员记录      6.打开文件 |\n");
    printf(" | 3. 删除销售员记录      7.保存文件 |\n");
    printf(" | 4. 销售员纪录排序      8.显示记录 |\n");
    printf(" | 0. 退出系统 |\n");
    printf("\n\n");
    printf("请选择(0-8):");
    c = getchar();
    getchar();
    return (c - '0');
}

//#include"head.h" 
int openfile(student stu[])
{
    int i = 0, j;
    FILE *fp;
    char filename[20], str[2];
    if (numstus != 0)
    {
        printf("已经有记录存在,是否保存?(y/n)");
        gets(str);
        if (str[0] == 'y' || str[0] == 'Y')
            writetotext(stu);
    }
    printf("请输入文件名:");
    gets(filename);
    numstus = 0;
    if ((fp = fopen(filename, "rb+")) == NULL)
    {
        printf("无法打开该文件\n");
        return(-1);
    }
    fscanf(fp, "%d", &numstus);
    fgetc(fp);
    while (i<numstus)
    {
        fscanf(fp, "%s", stu[i].number);
        fscanf(fp, "%s", stu[i].name);
        fscanf(fp, "%s", stu[i].sex);
        for (j = 0; j<numsubs; j++)
            fscanf(fp, "%f", &stu[i].subject[j]);
        fscanf(fp, "%f", &stu[i].score);
        fscanf(fp, "%f", &stu[i].average);
        fscanf(fp, "%d", &stu[i].index);
        i++;
    }
    fclose(fp);
    printf("文件读取成功\n");
    printf("是否显示纪录?(y/n)");
    gets(str);
    if (str[0] == 'y' || str[0] == 'Y')
        display(stu, 0, numstus - 1);
    return(0);
}
//#include "head.h" 
void sort(student stud[])
{
    int i, j = 0;
    char str[5];
    student *p;
    p = stud;
    if (numstus == 0)
    {
        printf("没有可供查询的记录!");
    }
    while (1)
    {
        for (i = 0;; i++)
        {
            printf(" 请输入查询方式:");
            printf("(直接输入回车则结束查询操作)\n");
            printf("1.按照学号\t");
            printf("2.按照姓名\t");
            printf("3.按照名次\n");
            gets(str);
            if (strlen(str) == 0) break;
            if (str[0] == '1')
            {
                printf("请输入排序次序:\n");
                printf("1.升序排列\t");
                printf("2.降序排列\n");
                gets(str);
                if (str[0] == '1')
                    sortnum2(p);
                else
                    sortnum(p);
                display(stud, 0, numstus - 1);
            }
            else if (str[0] == '2')
            {
                printf("请输入排序次序:\n");
                printf("1.升序排列\t");
                printf("2.降序排列\n");
                gets(str);
                if (str[0] == '1')
                    sortname2(p);
                else
                    sortname(p);
                display(stud, 0, numstus - 1);
            }
            else if (str[0] == '3')
            {
                printf("请输入排序次序:\n");
                printf("1.升序排列\t");
                printf("2.降序排列\n");
                gets(str);
                if (str[0] == '1')
                    sortcount2(p);
                else
                    sortcount(p);
                display(stud, 0, numstus - 1);
            }
            else printf("请输入1~3");
            printf("是否退出排序?(y/n)");
            gets(str);
            if (str[0] == 'y' || str[0] == 'Y') break;
        }
        return;
    }
}
void sortnum(student stud[])
{
    int i, j;
    student temp;
    student *p;
    p = stud;
    for (i = 0; i<numstus; i++)
    for (j = 0; j<numstus - i - 1; j++)
    {
        if (strcmp(stud[j + 1].number, stud[j].number)>0)
        {
            temp = *(p + j);
            *(p + j) = *(p + j + 1);
            *(p + j + 1) = temp;
        }
    }
}
void sortnum2(student stud[])
{
    int i, j;
    student temp;
    student *p;
    p = stud;
    for (i = 0; i<numstus; i++)
    for (j = 0; j<numstus - i - 1; j++)
    {
        if (strcmp(stud[j].number, stud[j + 1].number)>0)
        {
            temp = *(p + j);
            *(p + j) = *(p + j + 1);
            *(p + j + 1) = temp;
        }
    }
}
void sortname(student stud[])
{
    int i, j;
    student temp;
    student *p;
    p = stud;
    for (i = 0; i<numstus; i++)
    for (j = 0; j<numstus - i - 1; j++)
    {
        if (strcmp(stud[j + 1].name, stud[j].name)>0)
        {
            temp = *(p + j);
            *(p + j) = *(p + j + 1);
            *(p + j + 1) = temp;
        }
    }
}
void sortname2(student stud[])
{
    int i, j;
    student temp;
    student *p;
    p = stud;
    for (i = 0; i<numstus; i++)
    for (j = 0; j<numstus - i - 1; j++)
    {
        if (strcmp(stud[j].name, stud[j + 1].name)>0)
        {
            temp = *(p + j);
            *(p + j) = *(p + j + 1);
            *(p + j + 1) = temp;
        }
    }
}
void sortcount(student stud[])
{
    int i, j;
    student temp;
    student *p;
    p = stud;
    for (i = 0; i<numstus; i++)
    for (j = 0; j<numstus - i - 1; j++)
    {
        if (stud[j + 1].index>stud[j].index)
        {
            temp = *(p + j);
            *(p + j) = *(p + j + 1);
            *(p + j + 1) = temp;
        }
    }
}
void sortcount2(student stud[])
{
    int i, j;
    student temp;
    student *p;
    p = stud;
    for (i = 0; i<numstus; i++)
    for (j = 0; j<numstus - i - 1; j++)
    {
        if (stud[j].index>stud[j + 1].index)
        {
            temp = *(p + j);
            *(p + j) = *(p + j + 1);
            *(p + j + 1) = temp;
        }
    }
}
//#include"head.h" 
void statistic(student stud[]) /*新增功能,输出统计信息*/
{
    int i, j = 0, k = 0;
    char c1, str[2];
    float average[numsubs], sum = 0;
    if (numstus == 0)
        printf("没有可被查找的记录\n");
    else
    {
        while (1)
        {
            printf("下面将统计销售员的信息\n");
            printf("请选择你要统计哪科的成绩 1.A\t2.B\t3.C\t4.D\t5.E\n");
            c1 = getchar();
            printf("\t一共有个%d记录\n", numstus); /*总共记录数*/
            switch (c1)
            {
            case '1':
                for (i = 0; i<numstus; i++) /*循环输入判断*/
                {
                    sum += stud[i].subject[0];
                    if (stud[k].subject[0]>stud[i].subject[0]) k = i;
                    if (stud[j].subject[0]<stud[i].subject[0]) j = i;
                }
                average[0] = sum / numstus;
                printf("\t科目A的最高分:\n"); /*最高分*/
                printf("\t\t学号:%s 姓名:%s 分数:%.2f\n", stud[j].number, stud[j].name, stud[j].subject[0]);
                printf("\t科目A的最低分是:\n"); /*最低分*/
                printf("\t\t学号:%s 姓名:%s 分数:%.2f\n", stud[k].number, stud[k].name, stud[k].subject[0]);
                printf("\t科目A的平均分是 %5.2f\n", average[0]); /*平均分*/
                break;
            case '2':
                for (i = 0; i<numstus; i++) /*循环输入判断*/
                {
                    sum += stud[i].subject[1];
                    if (stud[k].subject[1]>stud[i].subject[1]) k = i;
                    if (stud[j].subject[1]<stud[i].subject[1]) j = i;
                }
                average[1] = sum / numstus;
                printf("\t科目B的最高分:\n"); /*最高分*/
                printf("\t\t学号:%s 姓名:%s 分数:%.2f\n", stud[j].number, stud[j].name, stud[j].subject[1]);
                printf("\t科目B的最低分是:\n"); /*最低分*/
                printf("\t\t学号:%s 姓名:%s 分数:%.2f\n", stud[k].number, stud[k].name, stud[k].subject[1]);
                printf("\t科目B的平均分是 %5.2f\n", average[1]); /*平均分*/
                break;
            case '3':
                for (i = 0; i<numstus; i++) /*循环输入判断*/
                {
                    sum += stud[i].subject[2];
                    if (stud[k].subject[2]>stud[i].subject[2]) k = i;
                    if (stud[j].subject[2]<stud[i].subject[2]) j = i;
                }
                average[2] = sum / numstus;
                printf("\t科目C的最高分:\n"); /*最高分*/
                printf("\t\t学号:%s 姓名:%s 分数:%.2f\n", stud[j].number, stud[j].name, stud[j].subject[2]);
                printf("\t科目C的最低分是:\n"); /*最低分*/
                printf("\t\t学号:%s 姓名:%s 分数:%.2f\n", stud[k].number, stud[k].name, stud[k].subject[2]);
                printf("\t科目C的平均分是 %5.2f\n", average[2]); /*平均分*/
                break;
            case '4':
                for (i = 0; i<numstus; i++) /*循环输入判断*/
                {
                    sum += stud[i].subject[3];
                    if (stud[k].subject[3]>stud[i].subject[3]) k = i;
                    if (stud[j].subject[3]<stud[i].subject[3]) j = i;
                }
                average[3] = sum / numstus;
                printf("\t科目D的最高分:\n"); /*最高分*/
                printf("\t\t学号:%s 姓名:%s 分数:%.2f\n", stud[j].number, stud[j].name, stud[j].subject[3]);
                printf("\t科目D的最低分是:\n"); /*最低分*/
                printf("\t\t学号:%s 姓名:%s 分数:%.2f\n", stud[k].number, stud[k].name, stud[k].subject[3]);
                printf("\t科目D的平均分是 %5.2f\n", average[3]); /*平均分*/
                break;
            case '5':
                for (i = 0; i<numstus; i++) /*循环输入判断*/
                {
                    sum += stud[i].subject[4];
                    if (stud[k].subject[4]>stud[i].subject[4]) k = i;
                    if (stud[j].subject[4]<stud[i].subject[4]) j = i;
                }
                average[4] = sum / numstus;
                printf("\t科目E的最高分:\n"); /*最高分*/
                printf("\t\t学号:%s 姓名:%s 分数:%.2f\n", stud[j].number, stud[j].name, stud[j].subject[4]);
                printf("\t科目E的最低分是:\n"); /*最低分*/
                printf("\t\t学号:%s 姓名:%s 分数:%.2f\n", stud[k].number, stud[k].name, stud[k].subject[4]);
                printf("\t科目E的平均分是 %5.2f\n", average[4]); /*平均分*/
                break;
            default:printf("输入错误!请输入1~5之间的数\n");
            }
            sum = 0;
            getchar();
            printf("是否继续进行统计?(y/n)");
            gets(str);
            if (str[0] == 'y' || str[0] == 'Y');
            else break;
        }
    }
}


int writetotext(student stud[]) /*将所有记录写入文件*/
{
    int i = 0, j;
    FILE *fp;
    char filename[20];
    printf("输入文件名称:");
    gets(filename);
    fp = fopen(filename, "w");
    fprintf(fp, "%d\n", numstus);
    while (i<numstus)
    {
        fprintf(fp, "%s %s %s ", stud[i].number, stud[i].name, stud[i].sex);
        for (j = 0; j<numsubs; j++)
            fprintf(fp, "%f ", stud[i].subject[j]);
        fprintf(fp, "%f %f %d ", stud[i].score, stud[i].average, stud[i].index);
        i++;
    }
    fclose(fp);
    printf("已成功存储!\n");
    display(stud, 0, numstus - 1);
    numstus = 0;
    return 0;
}

void welcome()
{
    printf("\t*************************************************************\n");
    printf("\t\t\t\t**销售管理系统**\n\t\t\t\t   欢迎使用!\n");
    printf("\t*************************************************************\n");

}

void showtable()
{
    printf("---------------------------------------------------------------------------------------\n");
    printf("编号\t姓名\t产品1销售额\产品2销售额\t总销售额\n");
    printf("---------------------------------------------------------------------------------------\n");
}


void display(student stud[], int n1, int n2)
{
    int i;
    showtable(); /*显示表头*/
    for (i = n1; i <= n2; i++)
        printf("%s\t%s\t.2f\t%.2f\t%.2f\n", stud[i].number, stud[i].name, stu[i].subject1, stu[i].subject2, stu[i].sum);

}
void display1()
{
    printf("\t\t本系统由计科本二班制作\n\n");
    printf("\t\t制作人员列表: \n\n");
    printf("\t\t谷梦林\n");
    printf("\n\n");
    getchar();
}
#include<string.h> 
void amendrecord(student stud[])
{
    char str[5]; /*供用户输入*/
    int i = -1, j;

    if (numstus == 0) /*没有记录返回*/
        printf("没有可供修改的记录!");
    while (i<0)
    {
        i = findrecord(stud);
        if (i >= 0)
        {
            printf("要删除这个学生的信息吗?(y/n)");
            gets(str);
            if (str[0] == 'y' || str[0] == 'Y')
            {
                deleterecord(stud, i);
                count(stud);
            }
            else
            {
                printf("确定要修改这个学生的信息吗?(y/n)");
                gets(str);
                if (str[0] == 'y' || str[0] == 'Y')
                {

                    printf("下面请重新输入学生的信息:\n");
                    printf("请输入学号:");
                    gets(stud[i].number);
                    printf("请输入姓名:");
                    gets(stud[i].name);
                    printf("请输入性别(男/女 1/0):");
                    gets(str);
                    if (str[0] == '0')
                        strcpy(stud[i].sex, "");
                    else
                        strcpy(stud[i].sex, "");
                    stud[i].score = 0;
                    printf("请按顺序输入成绩:");
                    for (j = 0; j<numsubs; j++)
                    {
                        scanf("%f", &stud[i].subject[j]);
                        stud[i].score += stud[i].subject[j];
                    }
                    getchar();
                    stud[i].average = stud[i].score / numsubs;
                }
                count(stud);
            }
            display(stud, 0, numstus - 1);
        }
        printf("是否继续进行其他修改?(y/n)\n");
        gets(str);
        if (str[0] == 'y' || str[0] == 'Y')
            i = -1;
        else i = 1;
    }
}

void deleterecord(student stu[], int i) /*删除信息*/
{
    int j;

    while (i >= 0)
    {
        for (j = i; j<numstus; j++)
            stu[j] = stu[j + 1];
        numstus--;
        printf("删除成功!\n");


    }
}

void count(student stud[])
{
    int i, j;
    for (i = 0; i<numstus; i++)
    {
        stud[i].index = 1;
        for (j = 0; j<numstus; j++)
        if (stud[j].score>stud[i].score)
            stud[i].index++;
    }
}





void addrecord(student stud[])
{
    int i = 0, j, num;
    char str[5];
    if (numstus != 0)
    {
        printf("已有记录存在是否覆盖?(y/n)\n");
        gets(str);
        if (str[0] == 'Y' || str[0] == 'y')
            i = 0;
        else i = numstus;
    }

    printf("请输入增加的销售员的信息条目数:");
    scanf("%d", &num);
    if (i == 0)
        numstus = num;
    else numstus += num;
    if (numstus>lens)
    {
        lens += 50;
        pointer = (student *)realloc(pointer, lens*LEN);
    }
    printf("请输入销售员信息:\n");
    for (; i<numstus; i++)
    {
        getchar();
        printf("请输入编号:");
        gets(pointer[i].number);
        printf("请输入姓名:");
        gets(pointer[i].name);
        printf("请输入产品1的销售额:");
        gets(pointer[i].subject1);
        printf("请输入产品2的销售额:");
        gets(pointer[2].subject2);
        pointer[i].sum = pointer[i].subject1 + pointer[i].subject2;
        count(stud); /*附名次*/
        display(stud, 0, numstus - 1);
        getchar();
    }
    int numstus;
    int lens;
    student *pointer;
    void main()
    {
        int i = 1;
        char str[2];
        lens = 100;
        pointer = (student *)malloc(lens*LEN); /*分配内存*/
        numstus = 0;
        welcome(); /*欢迎界面*/
        while (i>0)
        {
            i = menu_select(); /*控制菜单*/
            switch (i)
            {
            case 1:addrecord(pointer); break; /*增加学生信息*/
            case 2:findrecord(pointer); break; /*查询学生信息*/
            case 3:amendrecord(pointer); break; /*修改学生信息*/
            case 4:sort(pointer); break; /*学生信息排序*/
            case 5:statistic(pointer); break; /*统计信息*/
            case 6:openfile(pointer); break; /*打开文件*/
            case 7:writetotext(pointer); break; /*保存文件*/
            case 8:display(pointer, 0, numstus - 1); break; /*显示记录*/
            case 0:
                if (numstus != 0) printf("是否保存当前记录?(y/n)");
                gets(str);
                if (str[0] == 'y' || str[0] == 'Y')
                    writetotext(pointer);
                i = -1; break; /*退出系统*/
            default:printf("请输入数字0~8:\n"); i = 1; /*输入错误*/
            }
        }
        printf("\t\t欢迎再次使用本系统。\n\n");
        display1();
    }



问题是:
用C语言实现某公司销售信息的管理,具体功能如下:
1.销售员信息:每个销售员包括姓名,编号,产品1销售额,产品2销售额,总销售额共5项信息。
2.排序:分别实现按产品1销售额排序和产品2总销售额排序。
3.统计:分别统计产品1的总销售额和产品2的总销售额并进行输出
4.添加销售员的信息:增加一个销售员的信息,然后按其总销售额进行插入排序。
5.删除销售员的信息:输入一个销售员的姓名,删除其相关信息。
6.输出全部销售员的信息
7.退出系统


求大神帮忙。真的很急。

[ 本帖最后由 流逝 于 2014-12-27 13:10 编辑 ]
搜索更多相关主题的帖子: 信息 C语言 
2014-12-27 13:08
流逝
Rank: 1
等 级:新手上路
帖 子:3
专家分:4
注 册:2014-12-14
收藏
得分:0 
求帮忙改一下呀! 谢谢!

[ 本帖最后由 流逝 于 2014-12-27 13:46 编辑 ]
2014-12-27 13:43
快速回复:C语言的问题,用C语言实现某公司销售信息的管理。代码错了,帮忙改下。 ...
数据加载中...
 
   



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

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