运用面向对象的程序设计方法,要求选择动态数组类模板或链表类模板,任务中要运用I/O流对象对文件进行读写操作。
本题程序应提供的基本基本管理功能有:
1) 添加:即增加一个人的记录到系统中。个人记录应包含各门课成绩、担任职务,电话号码、邮政编码等。
2) 显示:即在屏幕上显示所有该评定系统中的人员信息,应能分屏显示。
3) 存储:即将通讯录信息保存在一个文件中。
4) 装入:即将文件中的信息读入程序。
5) 查询:可根据姓名查找某人的相关信息,若找到显示其所有相关信息。
6)修改:可修改一个人的除姓名外其它信息。
测试数据
程序应输入不少于10个人员的通讯录信息,应考虑到人员可以同名的情况。
设计方案提示
l 创建人员类Cperson,每个人员的应包含的数据有各门课成绩,职务,电话号码和邮政编码等,类中应包含有一个成员函数,可以根据规定计算最终综合成绩。用一个单向链表来管理人员信息,作为链表的值指针指向这些Cperson类对象,通过链表的遍历可以操作这些数据。最终通过排序,统计出获得奖学金人员。
l 创建人员类Cperson,每个人员的应包含的数据有各门课成绩,职务,电话号码和邮政编码等。类中应包含有一个成员函数,可以根据规定计算最终综合成绩。用动态数组来存储人员信息。将这些类对象存储在数组元素中。通过对数组的操作来处理每个人员类对象。最终通过排序,统计出获得奖学金人员。
非常的急,谢谢各位帮忙啦!
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#include"conio.h"
typedef struct Student
{char name[20];
char num[20];
int score;
Student *next;
}student;
student *creat()
{student *head;student *p,*s;int flag=1;
head=(student*)malloc(sizeof(student));p=(student*)malloc(sizeof(student));
head->next=p;
if(!p){printf("失败");return 0;}
printf("输入姓名:");gets(p->name);
printf("输入学号:");scanf("%s",p->num);
printf("输入成绩:");scanf("%d",&p->score);
while(flag)
{s=(student*)malloc(sizeof(student));
getchar();
printf("输入姓名:(输入0退出):");gets(s->name);
if(!strcmp(s->name,"0")){flag=0;break;}
printf("输入学号:");scanf("%s",s->num);
printf("输入成绩:");scanf("%d",&s->score);
p->next=s;
p=s;
}
p->next=NULL;
return head;
}
void listprint(student *head)
{student *p;
p=head->next;
while(p)
{printf("姓名:%s\n学号:%s\n成绩:%d\n",p->name,p->num,p->score);
p=p->next;
}
}
void listfind(student *head,char str[])
{student *p;p=head->next;
if(p)
{
while(p&&(strcmp(p->name,str)&&strcmp(p->num ,str)))
p=p->next;
if(p){ printf("姓名:%s\n学号:%s\n成绩:%d\n",p->name,p->num,p->score);}
else printf("没有该学生信息!\n");
}
}
void listadd(student *head)
{student *p,*s;int flag=1;
p=head->next;
while(p->next!=NULL)p=p->next;
while(flag)
{s=(student*)malloc(sizeof(student));
printf("输入姓名:(输入0退出):");gets(s->name);
if(!strcmp(s->name,"0")){ flag=0;break;}
printf("输入学号:");scanf("%s",s->num);
printf("输入成绩:");scanf("%d",&s->score);
p->next=s;
p=s;
getchar();
}
p->next=NULL;
}
void listdel(student *head,char str[])
{student *p1,*p2;p2=head;
p1=head->next;
while(p1&&(strcmp(p1->name,str)&&strcmp(p1->num ,str)))
{p2=p1;p1=p1->next;}
if(!p1)printf("\n\n\n\n\t 没有该学生的信息\n");
else {p2->next=p1->next;printf("\n\n\n\n\n\t\t\t\t 删除成功!\n\n");free(p1);}
}
void listsort(student *head)
{student *p;int MIN,MAX,count=0;float ave=0;
p=head->next;MIN=MAX=p->score;
while(p)
{if(MAX<p->score){MAX=p->score;}
if(MIN>p->score){MIN=p->score;}
ave=p->score+ave;p=p->next ;count++;}
printf("最高分是%d,最低分是%d,平均分是%f\n",MAX,MIN,ave/count);
}
void xiugai(student *head,char str[])
{student *p;p=head->next;
if(p)
{
while(p&&(strcmp(p->name,str)&&strcmp(p->num ,str)))
p=p->next;
if(p){ do{printf("请输入新成绩成绩:");scanf("%d",&p->score);if(p->score<0||p->score>100)printf("请输入0~100的数\n");}while(p->score<0||p->score>100);listfind(head, str);
}}
else printf("没有该学生信息!\n");
}
void menu()
{printf("\n\n\n\n\t\t\t菜单\n\t\t\t\n\t\t\t请选择\n\t\t\t********************\n\t\t\t*1创建资料\n\t\t\t*2查找\n\t\t\t*3显示全部\n\t\t\t*4添加\n\t\t\t*5删除\n\t\t\t*6统计\n\t\t\t*7修改\n\t\t\t*8退出\n\t\t\t********************\n");
}
int main()
{student *head;char str[20],ch; int count=0;
while(1)
{menu();ch=getch();
system("cls");
if(ch!='1'&&ch!='8'&&count==0){printf("\n\n\n\n\n\n\t\t\t 你还没有创建资料\n");printf("\n\t\t 按任意键回主菜单\n");getch();system("cls");continue;}
else count=1;
switch(ch)
{case '1':head=creat();break;
case '2':printf("输入要查找的姓名或学号:");gets(str);listfind(head,str);break;
case '3':listprint(head);break;
case '4':listadd(head);break;
case '5':printf("输入要删除的姓名或学号:");gets(str);listdel(head,str);break;
case '6':listsort(head);break;
case '7':printf("输入要修改的姓名或学号:");gets(str);xiugai(head,str);break;
case '8':printf("\n\n\n\n\n\n\t\t\t 谢谢使用\n\n\n\n\n");getchar();return 0;
}printf("\n\t\t 按任意键回主菜单\n");getch();system("cls");
}
}
很高兴为您服务
希望我的回答您能满意
ni ba guo cheng xie cuo le