| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 728 人关注过本帖
标题:[求助]晚辈在这里给各位前辈问好 希望能帮我这个忙 感激不尽
只看楼主 加入收藏
langlangla
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2004-12-20
收藏
 问题点数:0 回复次数:0 
[求助]晚辈在这里给各位前辈问好 希望能帮我这个忙 感激不尽

题目1:设计一个简单的学籍管理系统,具有基本的操作功能:插入、删除、查找和统计。 1、1数据结构 用4个结构数组(或链表)来存储下述4类学籍信息,每类信息的每条记录用结构类型自定义: 1.学生信息:学号、姓名、性别、出生日期、地址 2. 课程信息:课程号、课程名、学分、学时 3.专业信息:专业号、专业名称 4.课程成绩:学号、课程号、成绩 1、2 设计要求 1. 对以上每类信息建立数据结构 2. 对以上每类信息进行插入操作 3. 对以上每类信息进行删除操作 4. 对以上每类信息进行查找操作(查找关键字用下划线标出) 5. 数据统计; (1) 某个学生选修的课程 输入:学号(或学生姓名) 输出:学生姓名、课程名称 (2) 统计某个学生的总学分: 输入:学号(或学生姓名) 输出:总学分 (3) 统计某专业在某门课程上的平均成绩: 输入:专业号、课程号 输出:平均成绩 1、 3 设计成果 1. 源程序和可执行文件 2. 设计文档 要求: (4) 数据结构说明 (5) 主要算法的流程图 (6) 使用说明 (7) 测试数据 (8) 结论及心得 作业的做法: 学号的构成:年级_专业_类别_班级_序号,在本作业中没有班级,学生序号按照专业编排,构成如下:03021113--03是指2003级,021是第021号专业,113是这个专业这个年级第113号同学。这需要一个长整型数来表示。 如何拆分这个数字得到专业号?设专业号是y,学号是x,可以按照下面方法计算: y = x/1000 - (x/1000000)*1000 这是利用整型变量余数自然丢失的原理进行的。

对于:学生信息、课程信息、专业信息、课程成绩;这四个信息的插入、删除和查找操作的程序是相似的。基本上可以有三种方法: 1、 链表,这是存储效率和运行效率最高的方法,利用动态存储的方法进行。即用malloc函数建立新的存储单元,用free函数删除单元。利用指向下一个结构变量的指针建立链条。 2、 结构数组,这种方法将一类信息定义为一个结构类型,再用这个结构建立一个结构数组,它的缺点是只能存有限的单元,而且无论实际上单元有多少个,都要占用同样大小的空间;运行效率也比较低下。 3、 将单个信息列数组,即将学号、姓名、性别、专业等都单独建立数组,这个方法最笨,它具有方法2所有的缺点,而且软件维护和阅读困难,不便于理解。 选择的方法不同,其关键数据结构也不同!建议使用结构数组或链表。 举例,对于专业信息使用链表和结构数组的数据结构分别如下:

结构数组 链表 struct specialty { int SpeNum; char SpeName [50]; }; Struct specialty { int SpeNum; char SpeName [50]; specialty * next; };

数据存储:对于:学生信息、课程信息、专业信息、课程成绩这四个信息由于许多函数都要对其进行操作,应设为全局变量。每一种信息如果使用结构数组,应该有一个整形变量记录其现有记录的条数,以便进行录入、查寻等操作。如果是链表,应该定义头结点。 对于专业信息使用链表和结构数组的全局变量数据分别声明如下: 结构数组 链表 struct specialty Spe[50]; int pos=0; Struct specialty Spe; Struct specialty * SpeTop=&Spe;

对数据的基本操作 操作 结构数组 链表 插入: 设插入位置是 n; 插入信息是k for(i=pos;i>n-1;i--) { Spe[i+1].SpeNum=Spe[i].SpeNum; strcpy(Spe[i+1]. SpeName, Spe[i]. SpeName); } Spe[n-1].SpeNum=k.SpeNum; strcpy(Spe[n-1]. SpeName, k. SpeName); pos++; struct specialty ps1=SpeTop; struct specialty ps2=NULL; for(i=0;i<n-1;i++) { ps1=ps1->next; } ps2=malloc(sizeof(struct specialty)); ps2->SpeNum=k.SpeNum; strcpy(ps2->SpeName,k.SpeName); ps2->next=ps1; ps1.next=ps2; 删除位置为n的信息 for(i=n-1;i<pos;i++) { Spe[i].SpeNum=Spe[i+1].SpeNum; strcpy(Spe[i]. SpeName, Spe[i+1]. SpeName); } pos--; struct specialty ps1=SpeTop; struct specialty ps2=NULL,ps3=NULL; for(i=0;I<n-1;i++) { ps2=ps1; ps1=ps1->next; ps3=ps1->next; } ps2->next=ps3; free(ps1);

搜索更多相关主题的帖子: 晚辈 前辈 感激不尽 
2004-12-20 14:46
快速回复:[求助]晚辈在这里给各位前辈问好 希望能帮我这个忙 感激不尽
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.030233 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved