请设计一个简单的学生成绩管理系统,要求系统实现以下功能:
学生信息包括学号、姓名、性别、语文、数学、英语。
插入学生信息:
Insert id name sex x y z 其中的参数分别为学号、姓名、性别、三门课的成绩,成绩为浮点数。如果链表中已经存在相同学号的学生信息,插入失败。
输出所有学生信息:
List
按照学号从小到大的顺序输出所有学生的信息,每行一位学生的信息。每行的格式如下:
id name sex x y z
数据之间用一个空格分隔,成绩保留1位小数。
查找学生信息:
Find id
查找学号为id的学生信息。
修改学生信息:
Change id newname,newx,newy,newz
把学号为id的学生信息修改为newname,newx,newy,newz(学号保持不变)
删除学生信息:
Delete id
删除学号为id的学生信息
退出程序:
Quit或者Exit
#include<bits/stdc++.h>
using namespace std;
struct ElementType{
char id[20];
char name[30];
char sex[5];
double x,y,z;
};
typedef struct Node{
ElementType data;
struct Node *next;
}Node,*LinkList;
LinkList createList() //创建单链表
{
LinkList L;
L=(LinkList)malloc(sizeof(Node));
L->next=NULL;
return L;
}
LinkList find(LinkList L,char c[])
{
LinkList p;
p=L->next;
while(p!=NULL){
if(strcmp(p->data.id,c)==0) return p;
p=p->next;
}
return p;
}
LinkList input()
{
LinkList S;
S=(LinkList)malloc(sizeof(Node));
S->next=NULL;
scanf("%s%s%s",S->data.id,S->data.name,S->data.sex);
scanf("%lf%lf%lf",&S->data.x,&S->data.y,&S->data.z);
return S;
}
void charu(LinkList L,LinkList S)
{
LinkList p,pre;
pre=L;
p=L->next;
while(p!=NULL){
pre=p;
p=p->next;
}
S->next=NULL;
pre->next=S;
}
void output(LinkList S)
{
printf("%s %s %s ",S->data.id,S->data.name,S->data.sex);
printf("%.1f %.1f %.1f\n",S->data.x,S->data.y,S->data.z);
}
void List(LinkList L)
{
L=L->next;
while(L){
output(L);
L=L->next;
}
}
void change(LinkList L,LinkList S)
{
LinkList p,pre;
pre=L;
p=L->next;
while(p!=NULL){
if(strcmp(p->data.id,S->data.id)==0) break;
pre=p;
p=p->next;
}
pre->next=S;
S->next=p->next;
}
void Delete(LinkList L,char c[])
{
LinkList p,pre;
pre=L;
p=L->next;
while(p!=NULL){
if(strcmp(p->data.id,c)==0) break;
pre=p;
p=p->next;
}
pre->next=p->next;
}
void sort(LinkList L)
{
LinkList p,pre,t;
pre=L->next;
p=pre->next;
while(pre){
t=pre;
p=pre->next;
while(p){
if(strcmp(pre->data.id,p->data.id)>0) t=p;
p=p->next;
}
if(t!=pre) swap(t->data,pre->data);
pre=pre->next;
}
}
int main(){
char order[20];
char c[20];
LinkList L;
LinkList S;
L=createList();
while(1){
scanf("%s",order);
if(!strcmp(order,"Insert")){
puts("Insert:");
S=input();
if(find(L,S->data.id)==NULL){
charu(L,S);
output(S);
}
else printf("Failed\n");
}
else if(!strcmp(order,"List")){
puts("List:");
sort(L);
List(L);
}
else if(!strcmp(order,"Change")){
puts("Change:");
S=input();
if(find(L,S->data.id)!=NULL){
output(S);
change(L,S);
}
else printf("Failed\n");
}
else if(!strcmp(order,"Find")){
puts("Find:");
scanf("%s",c);
if(find(L,c)!=NULL){
output(find(L,c));
}
else printf("Failed\n");
}
else if(!strcmp(order,"Delete")){
puts("Delete:");
scanf("%s",c);
if(find(L,c)!=NULL){
puts("Deleted");
Delete(L,c);
}
else printf("Failed\n");
}
else{
puts("Good bye!");
break;
}
}
return 0;
}
很多AC加一个WA