
用C语言设计一学生成绩管理系统,要求: 1、加入一个学生的成绩 2、删除一个学生的成绩 3、求各学生的总分
2个回答
展开全部
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define MAXLEN 100
#define Null 0
typedef struct node {
int num; // 学号
char name[MAXLEN]; // 姓名
int score; // 分数
struct node *next; // 指针域
}list;
list *creat() // 新增成绩
{
list *head,*p,*r;
int i,n; // n 为学生人数
head=(list *)malloc(sizeof(list));
head->next=Null;
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=Null;
r->next=p;
r=r->next;
}
return (head);
}
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);
}
void output(list *h) // 输出成绩
{
list *p;
printf("学号\t姓名\t成绩\n");
p=h->next;
while (p!=NULL) {
printf("%d\t%s\t%d\n",p->num,p->name,p->score);
p=p->next;
}
}
void main()
{
list *p;
int k; // 控制循环的标志
while (1) {
printf(" ---------------------------------------\n");
printf(" | 学生成绩管理系统 |\n");
printf(" ---------------------------------------\n");
printf(" | 1. 登记成绩 |\n");
printf(" | 2. 删除成绩 |\n");
printf(" | 3. 输出所有学生成绩 |\n");
printf(" | 0. 退出系统 |\n");
printf(" ---------------------------------------\n");
printf("请输入你的选择:\n");
scanf("%d",&k);
switch(k) {
case 1: p=creat(); break;
case 2: p=del(p); break;
case 3: output(p); break;
case 0: exit(0);
default : printf("选择错误,重新开始!\n");
}
}
}
#include <stdlib.h>
#include <malloc.h>
#define MAXLEN 100
#define Null 0
typedef struct node {
int num; // 学号
char name[MAXLEN]; // 姓名
int score; // 分数
struct node *next; // 指针域
}list;
list *creat() // 新增成绩
{
list *head,*p,*r;
int i,n; // n 为学生人数
head=(list *)malloc(sizeof(list));
head->next=Null;
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=Null;
r->next=p;
r=r->next;
}
return (head);
}
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);
}
void output(list *h) // 输出成绩
{
list *p;
printf("学号\t姓名\t成绩\n");
p=h->next;
while (p!=NULL) {
printf("%d\t%s\t%d\n",p->num,p->name,p->score);
p=p->next;
}
}
void main()
{
list *p;
int k; // 控制循环的标志
while (1) {
printf(" ---------------------------------------\n");
printf(" | 学生成绩管理系统 |\n");
printf(" ---------------------------------------\n");
printf(" | 1. 登记成绩 |\n");
printf(" | 2. 删除成绩 |\n");
printf(" | 3. 输出所有学生成绩 |\n");
printf(" | 0. 退出系统 |\n");
printf(" ---------------------------------------\n");
printf("请输入你的选择:\n");
scanf("%d",&k);
switch(k) {
case 1: p=creat(); break;
case 2: p=del(p); break;
case 3: output(p); break;
case 0: exit(0);
default : printf("选择错误,重新开始!\n");
}
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询