C语言程序设计实习报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
用链表实现简单的学籍管理
一、系统概况
系统名称:用链表实现简单的学籍管理系统
软件要求: Turbo c 2.0
硬件要求:PC机
具体概况:
学籍管理系统是用turboc2.0 C语言编辑器设计一个学籍管理系统,该系统能很好的实现学籍管理,能按照设计菜单对其进行信息输入建立学籍档案,也能对系统进行编辑如插入学生信息、删除信息等操作,并能输出整个学籍信息,也可以按照学号或者总分进行排序输出。
本系统就是运用C程序设计中的结构体、指针、函数(系统库函数、自定义函数)、用指针处理链表、文件操作等知识编写的一个简单的方便查询和管理学籍的应用系统。
二、需求分析
●总体功能要求:
(1)链表的建立:每个节点包括:学号、姓名、性别、语文、数学、英语、总分;
(2)节点的插入:按学号的顺序插入;
(3)删除链表中的节点:按学号或者姓名;
(4)链表的输出:按学号排序、按总分排序。
●性能的要求:
(1)各个功能分别用函数实现;
(2)节点信息让用户通过键盘输入;
(3)总分通过计算获得;
(4)有简单的操作界面;
●功能模块图、流程图:
创建动态链表:
链表的插入的操作流程图:
输出链表操作的流程图:
链表排序操作的流程图:
三、设计
程序代码:
#include
#include
#define NULL 0………………/*宏定义*/
#define LEN sizeof (struct student)
int add(int a,int b,int c)……/*定义一个函数,计算语文数学英语成绩的总和*/ {
int s;
s=a+b+c;
return(s);
}
struct student…………/*定义一个结构体变量管理信息*/
{
long num;
int score[3];
char name[20];
char sex[2];
int sum;
struct student *next;
};
int n;……………… /*定义一个全局变量*/
struct student *sort(struct student *m) /*排序函数(从小到大按学号排序)*/ {
int k=0;
struct student *p,*q,*t,*l;
l=m->next;……………… /*将原表头指针所指的下一个结点作为头指针*
m->next=NULL;……………… /*第一个结点为新表的头结点*/
while(l!=NULL) ………/*当原表不为空时进行排序*/
{
t=l; ………/*取原表的头结点*/
l=l->next;………/*原表头结点指针后移*/
p=m; ……/*设定移动指针P,从头指针开始*/
q=m;………/*设定移动指针q作为p的前趋,初值头指针*/
while(t->num>p->num&&p!=NULL)……………/*进行学号比较*/ {
q=p;……/*待排序点值大,往后插,所以新表指针后移*/
p=p->next;
}
if(p==q) …… /*p= =q说明待排序点值小,应排在首位*/ {
t->next=p;……………/*待排序点的后继为P*/
m=t;……/*新头结点为待排序点*/
}
else/*待排序点插入在中间某个位置p和q之间,如果P为空则是尾部*/ {
t->next=p;…… /*t的后继是p*/
q->next=t;……/*q的后继是t*/
}
}
p=m;
while(p!=NULL)
{
k++;
p=p->next;
}
return(m);
}
struct student *sorts(struct student *m) /*排序函数(从低到高总分排序)*/ {
int k=0;
struct student *p,*q,*t,*l;
l=m->next;……………… /*将原表头指针所指的下一个结点作为头指针*
m->next=NULL;……………… /*第一个结点为新表的头结点*/
while(l!=NULL) ………/*当原表不为空时进行排序*/
{
t=l; ………/*取原表的头结点*/
l=l->next;………/*原表头结点指针后移*/
p=m; ……/*设定移动指针P,从头指针开始*/
q=m;………/*设定移动指针q作为p的前趋,初值头指针*/
while(t->sum>p->sum&&p!=NULL)……………/*进行总分比较*/ {
q=p;……/*待排序点值大,往后插,所以新表指针后移*/
p=p->next;
}
if(p==q) …… /*p= =q说明待排序点值小,应排在首位*/ {
t->next=p;……………/*待排序点的后继为P*/
m=t;……/*新头结点为待排序点*/
}
else/*待排序点插入在中间某个位置p和q之间,如果P为空则是尾部*/ {
t->next=p;…… /*t的后继是p*/
q->next=t;……/*q的后继是t*/
}
}
p=m;
while(p!=NULL)
{
k++;
p=p->next;
}