c语言实习报告

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{printf("\tK_name\tK_num\tP_score\tK_score\tXuefen\n");
7
p2->next=p1->next S6:输出“delete ****(学号为****的学生的信息)”。
4 数据查询 S1:定义指针变量 p,并且指向 struct student 类型。 S2:执行 p1=head. S3:输入一个学生的姓名,再调用函数 search_name()。 S4:若 head 为 NULL,则输出“ List null!”,并结束此模块 。 S5:如果 head 不为 NULL,当系统中存在输入的学生的信息时,执行
15
七. 程序源代码
#include<stdio.h> #include <conio.h> #include<malloc.h> #include <string.h> #define NULL 0 #define N 3 #define LEN sizeof(struct student)
int n; struct student *head=NULL;
8
五. 运行结果
主界面 系统主菜单(选择1进入信息输入模块)
9
输入学生基本信息及课程基本信息
10
11
修改学生基本信息 返回主菜单并选择数据查询模块
输出学生基本信息
12
输出学生课程基本信息 返回主菜单并选择数据插入模块
13
输入要插入的学生的基本信息及课程基本信息
返回主菜单并选择数据删除模块 删
2. 模块功能描述
A. 主模块:连接不同的模块,使其他七个模块紧密连接在一起,各模块通 过它与其他模块进行数据交换,可以任意进入其他各模块实现相应功能 并返回,使各模块可以循环操作;
B. 信息录入模块:录入学生信息,把需要的学生信息建 立成链表;
C. 信息修改模块:找到需要修改学生的信息,选择需要 修改的信息选项并加以修改。修改完毕退出该模块:并提示没有找到该 模块:
1. 按照程序实现功能的要求可把系统划分为主模块 main﹙﹚,信息的录入, 信息输出,信息的修改,信息的插入,信息的查询、信息删除和信息保 存 8 个模块,其中信息的输出是学生的基本信息和输出课程的基本信息 2 个子模块,信息查询又包括查询指定姓名学生信息和输出查询指定姓 名学生信息 2 个子模块。整个程序通过主模块把其他几个模块连接起来 实现各项功能。
D. 信息插入模块:输入要插入学生的信息,按平均成绩从高到低的顺序找
4
到插入位置,将该学生信息插入到已建立的链表中; E. 信息查询模块:按学号或姓名找到要查询的学生信息并输出,没有找到
给予提示; F. 信息输出模块:按平均成绩从高到低的顺序输出全部学生信息,找到不
及格学生并输出相应的信息; G. 信息删除模块:删除指定学号的学生及其课程信息; 3.主要模块结构图:
“p=p->next”,并输出“It's successful to search the message!” S6:输出 p 指向的成员的值。
5 数据插入 S1:用指针变量 p0 指向带插入的结点,p1 指向第一个结点。 S2:若 head==NULL,执行“head=p0,p0->next=NULL”。 S3: 若 head!=NULL, 当 (p0->num>p1->num)&&(p1->next!=NULL) 成 立
//平时成绩 //综合成绩 //学分 //重修 //平均分
float avg(struct student *p) { float sum=0;
int i; for(i=0;i<N;i++)
sum+=p->z_score[i]; p->aver=(float)sum/N; return p->aver; }
时,执行“p2=p1,p1=p1->next”。 S4:当 p0->num<=p1->num 时,如果 head==p1,则将 p0 赋值给 head,否
则执行“p2->next=p0, p0->next=p1”,转到 S6。 S5:当p0->num<=p1->num不成立时,执行“p1->next=p0,p0->next=NULL” S6:执行“n=n+1”。 S7:返回头指针。
struct student
{ char name[10]; //姓名
long num;
//学号
百度文库
int squad;
//班级
char sex[3];
//性别
int age;
//年龄
int dorm_num;
//宿舍号码
char tel_num[20];
//电话号码
int k_num[N];
//课程编码
将 p1 的值赋给 p2->next,此时 p2 指向第一个结点 S7:执行“p2->next=p1",就将新结点的低值赋给第一个结点的 next 成员,
6
是第一个结点的 next 成员只想第二个结点。 S8:使 p1 指向刚建立的结点。 S9: 使 p2->next=NULL,结束建立新单元。
2 数据修改 S1:若是修改学生基本信息,则先用 printf 和 scanf 函数输入要修改的学
输出修改后的学生信息。 .
3 数据删除 这个模块是通过调用函数 struct student *del(struct student *head,long num)
来实现其功能的。删除函数的算法如下: S1: 定义指针变量 p1、p2,并且指向 struct student 类型。 S2:若 head==NULL,则输出“List null!”并结束这个模块。 S3:若 head 不为 NULL,则把 head 赋值给 p1. S4:当 num!=p1->num&&p1->next!=NULL 时,执行 p2=p1, p1=p1->next S5:若 num==p1->num,当 p1==head 时,执行 head=p1->next,否则执行
生姓名.再转到 S3。 S2: 若是修改学生课程信息,则先用 printf 和 scanf 函数输入要修改的学
生姓名.再转到 S3. S3:用查找函数 void *search_name(struct student *head,char name[10])找
到该学生数据,并输出该学生数据。 S4:再用 printf 和 scanf 函数修改该学生信息,最后调用 print(p)输出函数
5
三. 数据结构设计
先设计了头文件,以及定义了 struct student 这个结构体,根据功能分析 了要设定的函数:struct student *creat(void)创建链表,float avg(struct student *p)求平均成绩,void *search_name(struct student *head,char name[10])查找函 数,struct student * insert(struct student *head,struct student *stud)插入函数, struct student *del(struct student *head,long num)删除函数,void print(struct student *p)输出函数,void modify(struct student *head)修改函数,全由主菜 单控制,最后在主函数中用 if 语句来控制。
四. 主要模块算法说明
1 数据录入 先定义全局变量 head,struct student *head=NULL,再建立一个链表: S1:定义指针变量 p1、p2,并且指向 struct student 类型。 S2:用 malloc 函数开辟第一个结点,并使 p1、p2 指向该结点。 S3:从键盘读入一个学生数据给 p1 所指结点。 S4:再开辟另一结点并使 p1 指向它 S5:输入该节点的数据。 S6:输入的学号不为“0”,则应链入第二个结点(n=2),由于 n 不为 1,则
2
一.系统功能介绍
数据的录入: 1. 录入学生基本信息:姓名、班级、学号、性别、年龄、宿舍号码、 电话号码等。 2. 录入学生三门课程﹙Maths,Chinese,PE﹚的基本信息,如课程编号, 课程名称,考试成绩,平时成绩,综合成绩,学分等并且计算总平 均成绩,以及是否重修。
数据的修改: 1. 修改学生的基本信息 2. 修改其课程信息
16
char k_name[N][20]; float k_score[N]; float p_score[N]; float z_score[N]; float xuefen[N]; char again[4]; float aver; struct student *next; };
//课程名称 //考试成绩
//求平均分
struct student *creat(void)
//建立链表
17
{struct student *p1,*p2; int i,j; n=0; p1=p2=(struct student *)malloc(LEN); printf("\tPlease input the datas as it says:\n\n "); printf("\tNum:"); scanf("%ld",&p1->num); printf("\tName:"); scanf("%s",p1->name); printf("\tSquad:"); scanf("%d",&p1->squad); printf("\tSex:"); scanf("%s",p1->sex); printf("\tAge:"); scanf("%d",&p1->age); printf("\tDorm_num:"); scanf("%d",&p1->dorm_num); printf("\tTel_num:"); scanf("%s",p1->tel_num); for(i=0;i<N;i++)
除指定学号的学生的所有信息
返回主菜单并选择6来退出系统
14
六. 课程设计总结
通过这次的实习,我学会了很多东西,也懂得了许多道理。 上机就是将所学知识应用到实际问题中的操作过程,通过这次的上机 实践,我深刻地认识到程序要在不断的动手,不断思考与探索中得到,当 然平日的学习也是必不可少的。一开始,编制的程序有很多语法和逻辑错 误,但在不断的调试过程中,程序成功的运行了。虽然调试程序的过程很 繁琐,每次都要输入大量的数据,运行失败,又要重新运行,重新输入大 量的数据,但是不调试,程序又怎么能运行呢?这次的实习还让我明白一 个完美的程序需要你对相关函数熟练掌握,如这次的题目里面就应用到了 很多函数,不仅有书上介绍过的函数,还有一些自己定义的函数,同时这 次的题目主要用到了结构体,链表的知识,这加深了我对链表的理解,对 链表的功能也有了一定的强化。如:插入链表,删除链表,建立动态链表 等,同时还更深入的理解了结构体的作用和用法, 在这次实践中,我也明白自己有很多不足,并且看到了自己学习方法 的一些缺陷,例如还不能熟练的掌握指针,链表的运用。虽然这次实习的 时间很短,但它让我更深切的明白 C 语言的一些真谛,为我以后的学习提 供了珍贵的参考经验。
输入一学生姓名就可实现以上两种功能。 数据的插入:插入某个学生的基本信息,以及其课程信息。 数据的查询:如按学号查询或按姓名查询等。 数据的删除:如删除指定学号、或者指定姓名的学生及选修课程信息; 平均成绩的计算:在输入学生三门课程的成绩后,计算三门课程的平均
成绩。
3
二.功能模块结构
中南大学
C 语言程序课程设计(实践)
报告
题目 学生姓名 学号 专业班级 指导教师 学院 完成时间
小型学生信息管理系统
1
目录
1) 系统功能介绍…………………………………………… 2) 功能模块结构…………………………………………… 3) 数据结构设计…………………………………………… 4) 主要模块算法说明……………………………………… 5) 运行结果………………………………………………… 6) 课程设计总结…………………………………………… 7) 附录﹙程序源代码﹚…………………………………… 8) 参考文献…………………………………………………
相关文档
最新文档