C语言题目:学生管理系统

2024-11-23 10:44:24
推荐回答(2个)
回答1:

#include
#include
#include
#define MAXLEN 100
#define ERROR 0
typedef struct node
{ int num;
char name[MAXLEN];
int score;
struct node *next;
}list;

// 头文件creat.h的内容
//#include"hh.h"
list *create()
{ list *head,*p,*r;
int i,n;
head=(list *)malloc(sizeof(list));
head->next=ERROR;
r=head;
printf("请输入学生人数:\n");
scanf("%d",&n);
for(i=1;i<=n;i++)
{ p=(list *)malloc(sizeof(list));
printf("输入学生的学号:\n");
scanf("%d",&p->num);
printf("输入学生的姓名:\n");
scanf("%s",p->name);
printf("输入学生的成绩:\n");
scanf("%d",&p->score);
p->next=ERROR;
r->next=p;
r=r->next;
}
return(head);
}
// 以下是头文件insert.h的内容
list *insert(list *h)
{
list *p,*q,*r,*head;
head=h;
r=h;
p=h->next;
// 下面构造一个学生的信息
q=(list *)malloc(sizeof(list));
printf("输入待插入学生的学号:\n");
scanf("%d",&q->num);
printf("输入姓名:\n");
scanf("%s",q->name);
printf("输入成绩:\n");
scanf("%d",&q->score);
q->next=ERROR;
// 找到链表的表尾结点
while(p!=ERROR)
{ r=p;
p=p->next;
}
//将新结点插入到表尾
r->next=q;
r=r->next;
return(head);
}
// 以下是头文件find.h的内容
void find(list *h)
{
int k;
list *p;
p=h->next;
printf("输入要查找学生的学号:\n");
scanf("%d",&k);
while(p && p->num!=k)
p=p->next;
if(p)
{ printf("学号\t姓名\t成绩\n");
printf("%d\t%s\t%d\n",p->num,p->name,p->score);
}
else
printf("没找到!\n");
}
// 以下是头文件del.h的内容
list *del(list *h)
{ int k;
list *p,*q;
q=h;
p=h->next;
printf("请输入待删除学生的学号:\n");
scanf("%d",&k);
while(p && p->num!=k)
{ q=p;
p=p->next;
}
if(p)
{
q->next=p->next;
free(p);
}
else
printf("没有这个学生成绩,无法删除!\n");
return(h);
}
// 以下是头文件output.h的内容
void output(list *h)
{
list *p;
p=h->next;
while(p!=ERROR)
{printf("学号\t姓名\t成绩\t\n");
printf("%d\t%s\t%d\n",p->num,p->name,p->score);
p=p->next;
}
}
int main()
{ list *p;
int k; //控制循环的标志
while(1)
{
printf(" -----------------------------------\n");
printf(" | 学生成绩管理 |\n");
printf(" |__ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|\n");
printf(" | 1. 登记成绩 |\n");
printf(" | 2. 查询成绩 |\n");
printf(" | 3. 插入成绩 |\n");
printf(" | 4. 删除成绩 |\n");
printf(" | 5. 输出所有学生成绩 |\n");
printf(" | 0. 退出程序 |\n");
printf(" ------------------------------------\n");
printf(" 请输入你的选择:\n");
scanf("%d",&k);
switch(k)
{ case 1: p=create();break;
case 2: find(p);break;
case 3: p=insert(p);break;
case 4: p=del(p);break;
case 5: output(p);break;
case 0: exit(0);
default: printf("选择错误,重新开始!\n");
}
} //while
}

回答2:

这些东西都是重复的东西,而且数组做的话插入,删除算法复杂度很大,楼主自己去文库搜吧,很多资源的。