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 编辑 ]










求帮忙改一下呀! 谢谢!