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