注册 登录
编程论坛 C++教室

[求助]"利用单向链表实现简单的学生信息管理"是什么意思

rqwd 发布于 2007-06-25 16:38, 3834 次点击
题目是:利用单向链表实现简单的学生信息管理     要求自己设计  还要答辩呢  我都不明白是什么意思  大家帮帮忙 谢谢了`
24 回复
#2
yuyunliuhen2007-06-25 16:50
你已经说的够清楚了啊  ^_^
#3
rqwd2007-06-25 16:56
可是这个设计要怎么做呢```
#4
rqwd2007-06-25 17:10
哪位高手能耽误下时间为我做一下啊````期末考试的题啊```考不过就完蛋了 谢谢啊``
#5
野比2007-06-25 19:37
就是最基本的链表...forward only...
*----*
|node|
|学好|
|姓名|
|其他|
*----*
|指针| ----> 下一个节点node...
*----*

至于信息管理, 主要是遍历节点..
你用while(指针!=NULL)进行遍历...然后找你要的信息...
就说这么多, 再多就成我的期末考试了...
#6
游乐园2007-06-25 19:48
LS  写的还蛮形象的哦  
#7
野比2007-06-25 19:58
就那样吧...希望他能做出来..
#8
rqwd2007-06-25 20:23

完了``估计做不出来了```什么都不明白``我是初学者 刚接触C++ 不够还是谢谢大家 我在努力下```

#9
百年不亮2007-06-25 20:26
大家只能告诉你一个思路,你有问题可以上来问.

别人给你写出程序来一是很浪费时间,二是对你也没有好处.尽量自己动手.
#10
aipb20072007-06-25 20:31

呵呵~

#11
百年不亮2007-06-25 20:35
斑竹把这里当水区了?
#12
aipb20072007-06-25 20:41
都被你们说的这么清楚,就只有纯支持个啦!
#13
killer_l2007-06-25 20:42
刚开始学就有答辩了?
#14
百年不亮2007-06-25 20:47
我们也搞过,就是你写了个程序,老师来提下问,关于具体实现中的某个细节.课程设计等的需要这样,防止学生抄别人的,老师没时间看源代码也只能这样.
#15
野比2007-06-25 21:00
记得我以前做大实验...玩了3天游戏, 最后拷别人程序交差...
然后老师对我说 做的不错, 继续.. 对给我程序的人说 你的是抄他的吧?

这就是平时努力的结果...
#16
killer_l2007-06-25 21:06
以下是引用野比在2007-6-25 21:00:26的发言:
记得我以前做大实验...玩了3天游戏, 最后拷别人程序交差...
然后老师对我说 做的不错, 继续.. 对给我程序的人说 你的是抄他的吧?

这就是平时努力的结果...

#17
野比2007-06-25 21:14
以下是引用killer_l在2007-6-25 21:06:52的发言:

平时为几十号人提供原始版本的好处就是最后的关键时刻老师会让你很轻松过..

#18
xiongxueming2007-06-25 22:08

单链表是通过指针调用的,你要是用的话我给你一个
#include<stdio.h>
#include<stdlib.h>
struct node
{
int id;
char name[10];
float english,math,computer,zongfen,pingjunfen;
struct node *next;
}*head;
void luru();
void shanchu();
void xiugai();
void xianshi();
void zongfenhepingjunfen();
void luru()
{
float a;
struct node *p,*q;
if(head==NULL)
{
head=(struct node *) malloc(sizeof(struct node));
head->next=NULL;
}
p=(struct node *) malloc(sizeof(struct node));
printf(" qingshuruxuehao:");
scanf("%d",&p->id);
printf(" qingshuruxingming:");
scanf("%s",&p->name);
for(;;)
{
printf(" qingshuruyingyu(0~100):");
scanf("%f",&a);
if(a<0||a>100)
{
printf(" shuruyingyuyouwu!\n");
continue;
}
else break;
}
p->english=a;
for(;;)
{
printf(" qingshurushuxue(0~100):");
scanf("%f",&a);
if(a<0||a>100)
{
printf(" shurushuxueyouwu!\n");
continue;
}
else break;
}
p->math=a;
for(;;)
{
printf(" qingshurujisuanji(0~100):");
scanf("%f",&a);
if(a<0||a>100)
{
printf(" shurujisuanjiyouwu!\n");
continue;
}
else break;
}
p->computer=a;
p->next=NULL;
q=head;
if(head->next==NULL)
{
head->next=p;
}
else
{
while(q->next!=NULL)
q=q->next;q->next=p;
}
}
void shanchu(n)
{
struct node *q1,*q2,*q3;
q1=head;
q3=q1;
if(head->next==NULL)
{
printf(" chengjibiaowujilu!\n");
}
else
{
while(q1->id!=n && q1->next!=NULL)
{
q3=q1;q1=q1->next;
}
if(q1->id==n)
{
q2=q3->next;
q3->next=q2->next;
free(q2);
}
else return;
}
}
void xiugai()
{
int n;
struct node *p;
float a;
p=(struct node *) malloc(sizeof(struct node));
p->next=NULL;
printf(" qingshuruyaoxiugaidexuehao:");
scanf("%d",&n);
p->id=n;
p=head;
if(p!=NULL)
{
while(p->id!=n && p->next!=NULL)
{
p=p->next;
}
if(p->id==n)
{
printf(" qingshuruxingming:");
scanf("%s",&p->name);
for(;;)
{
printf(" qingshuruyingyu(0~100):");
scanf("%f",&a);
if(a<0||a>100)
{
printf(" shuruyingyuyouwu!\n");
continue;
}
else break;
}
p->english=a;
for(;;)
{
printf(" qingshurushuxue(0~100):");
scanf("%f",&a);
if(a<0||a>100)
{
printf(" shuruyingyuyouwu!\n");
continue;
}
else break;
}
p->math=a;
for(;;)
{
printf(" qingshurujisuanji(0~100):");
scanf("%f",&a);
if(a<0||a>100)
{
printf(" shuruyingyuyouwu!\n");
continue;
}
else break;
}
p->computer=a;
}
else
printf(" xuehaobucunzai!\n");
}
else
printf(" xuehaobucunzai!\n");
}
void xianshi()
{
struct node *p;
p=head;
if(p->next==NULL)
{
printf(" chengjibiaowujilu!\n");
}
else
{
printf(" xuehao xingming yingyu shuxue jisuanji\n");
while(p->next!=NULL)
{
printf(" %d %s %3.2f %3.2f %3.2f\n",p->next->id,p->next->name,p->next->english,p->next->math,p->next->computer);
p=p->next;
}
}
}
void zongfenhepingjunfen()
{
struct node *p;
p=head;
p->zongfen=p->english+p->math+p->computer;
p->pingjunfen=p->zongfen/3;
p=head;
if(p->next==NULL)
{
printf(" chengjibiaowujilu!\n");
}
else
{
printf(" xuehao xingming zongfen pingjunfen\n");
while(p->next!=NULL)
{
printf(" %d %s %3.2f %3.2f\n",p->next->id,p->next->name,p->next->zongfen,p->next->pingjunfen);
p=p->next;
}
}
}
main()
{
int x,n;
for(;;)
{
printf(" chengjiguanli \n");
printf(" ----------------------------------------\n");
printf(" | 1.chengjiluru |\n");
printf(" | 2.chengjishanchu |\n");
printf(" | 3.chengjixiugai |\n");
printf(" | 4.chengjixianshi |\n");
printf(" | 5.jisuanzongfenhepingjunfen |\n");
printf(" | 0.tuichu! |\n");
printf(" ----------------------------------------\n");
printf(" qingshurugongnenghao:");
scanf("%d",&x);
if(x==1) luru();
if(x==2)
{
printf(" qingshuruyaoshanchudexuehao:");
scanf("%d",&n);
shanchu(n);
}
if(x==3) xiugai();
if(x==4) xianshi();
if(x==5) zongfenhepingjunfen();
if(x==0) break;
}
}

#19
xiongxueming2007-06-25 22:14

对了,上面的没有成绩查找,补充一下:
这是一个自定义的一个函数:只要加在里面就可以了,记得要在前面定义一 下,命令是void chazhao();
void chazhao()
{
int n;
struct node *p;
float a;
p=(struct node *) malloc(sizeof(struct node));
p->next=NULL;
printf(" qingshuruyaochazhaodexuehao:");
scanf("%d",&n);
p->id=n;
p=head;
if(p!=NULL)
{
while(p->id!=n && p->next!=NULL)
{
p=p->next;
}
if(p->id==n)
{
printf(" xuehao xingming yingyu shuxue jisuanji\n");
printf(" %d %s %3.2f %3.2f %3.2f\n",p->id,p->name,p->english,p->math,p->computer);
}
}
}
最后在主函数里面输入一条显示成绩查找的命令就可以了,命令是printf(" | 3.chengjichazhao |\n");
在主函数里面直接调用函数chazhao();
这样就可以了!

#20
游乐园2007-06-25 22:19

呵呵,整个都给写了, 你完全替他解决了问题

#21
rqwd2007-06-26 14:24

设计方法和基本原理
1.课题功能描述
本程序要求创建单向链表保存学生的各项信息,如学号、姓名和成绩等,并完成学生信息的插入、删除及信息的显示等功能。
2. 问题详细描述
某班有若干个学生,每个学生的成绩信息包括学号、姓名和某门课成绩。要求编写多个函数分别实现下列功能,而后在main函数中进行调用。
(1)创建链表函数creatList:建立单向链表,每个结点包括:学号(int num),姓名(char name[20]),成绩(double score)。按照学号顺序从小到大输入学生的信息。当输入学生学号为0时,表示输入结束。

只有本站会员才能查看附件,请 登录

(2)插入函数insert:给出某个同学的信息,按照学号的顺序将其插入该链表中,使原链表仍然有序。如插入学生信息为:
96085 WangLiping 77
98120 ZhangLi 75
99912 LiuHai 80
(3)删除函数delete:给定某个同学的学号,找到该同学的信息后,将其从链表中删除。如删除学号为98044的同学信息。
(4)显示函数output:输出链表中各个同学的信息。
3. 问题的解决方案
根据问题的描述,可以按照程序要求的功能采用结构化的设计思想,划分为五个功能模块。
(1) 采用结构体类型存储学生信息。
(2) 创建链表时,要给各个结点输入数据(每个结点存储一个学生的信息),并建立起前后结点相互联结的关系。
(3) 插入时使用new操作符开辟新的存储空间,用来存放新结点,而后找到与该学号对应的结点,将新结点插入到其后。删除时,先输入某一个学号,而后找到与该学号对应的结点将其从链表中删除,即将该结点从链表中分离出来,并释放其内存空间。
(4) 提供菜单选项,供用户选择各个功能模块,例如:
1. 插入新信息,请选择:1
2. 删除信息,请选择:2
3. 显示信息,请选择:3
4. 结束程序,请选择:4
选择1,执行插入操作时,应提示用户输入待插入的学生信息;选择2,执行删除操作时,提示用户输入要删除的学生学号。
四、主要技术问题的描述
根据三的分析,主要问题在于链表的创建、插入和删除。
(1)链表的创建
依据学号判断链表的建立过程是否结束。输入结束后,表尾结点所指向的下一个结点应为空。
(2)结点的插入
先根据学号找到新结点的位置,例如设指针变量q指向新结点,若要将其插入到指针变量p指向的结点后,可执行如下操作:
t=p->next; //t为指针变量
p->next=q;
q->next=t;
n++;//结点数目增加
这样就将该新结点插入到了指定位置,注意考虑要插入的结点可能位于最后的位置。
(3)结点的删除
删除时,要考虑待删除结点是否为第一个结点;若为中间结点,设指针变量p1指向待删除结点,p2指向其前一个结点,则删除p1结点的操作为:
p2->next=p1->next;
delete(p1);
五、创新要求
在基本要求达到后,进行创新设计:
(1)使用多文件,即主函数和各个函数分别存放在不同的.cpp文件中,在头文件中进行函数原型声明。
(2)对程序功能进行拓展,使其更加实用。例如,将该链表按照成绩进行排序。

#22
rqwd2007-06-26 14:27
楼上就是题目的原文````今天才拿到的  下周2就考了 而且还得复习历史 时间也不够了 说实话我连看都看不懂````我才刚学到数组 指针什么的 别的都不会   现在考试考这个 感觉都不知道从哪下手   谢谢大家的帮忙````太感谢了```
#23
野比2007-06-26 20:32
祝你好运...
根据经验..考试时程序写的越流畅..排版越好.. 关键部分注释越多 ..(没错, 试卷上写程序注释!)..
最后得分越多..
真理...
#24
rqwd2007-06-27 22:52

怎么有错误呢`

#25
tyronerush2008-12-09 19:33
good
1