发布网友
共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"
热心网友
把学生的属性封装到结构体中,然后把结构体写到文件中,查找的时候从文件中读取一条数据,然后和关键字对比就可以了。
热心网友
很简单,给我邮箱发给你
热心网友
到复印印刷地方能弄
热心网友
看你需要什么样的程序