C语言程序设计实习报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

}

相关文档
最新文档