用c 语言编写程序实现

发布网友

我来回答

5个回答

热心网友

展开1全部#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);

}
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");
}
list *del (list *h)
{
int k; // 要删除的学生学号
list *p,*q; // 为什么要两个指针呢?
q=h;
p=h->next;
printf("请输入待删除的学生学号:\n");追答scanf("%d",&n);
for(i=1;inum);

printf("请输入学生姓名:\n");
scanf("%s",&p->name);

printf("请输入学生成绩:\n");
scanf("%d",&p->score);
p->next=Null;
r->next=p; // 这个地方我总是不明白,是怎样让结点下移一个的呢?
r=r->next;
}
return (head);

}
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");
}
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);
}
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=Null;
// 找到链表的结尾结点
while(p!=Null) {
r=p;
p=p->next;
}
// 将新结点插入表尾
r->next=q;
r=r->next;
return (head);
}
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(" | 4. 删除成绩 |\n");

printf(" | 5. 输出所有学生成绩 |\n");

printf(" | 0. 退出系统 |\n"

热心网友

把学生的属性封装到结构体中,然后把结构体写到文件中,查找的时候从文件中读取一条数据,然后和关键字对比就可以了。

热心网友

很简单,给我邮箱发给你

热心网友

到复印印刷地方能弄

热心网友

看你需要什么样的程序

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com