课程设计报告格式.docx
- 文档编号:10953335
- 上传时间:2023-02-23
- 格式:DOCX
- 页数:47
- 大小:248.25KB
课程设计报告格式.docx
《课程设计报告格式.docx》由会员分享,可在线阅读,更多相关《课程设计报告格式.docx(47页珍藏版)》请在冰豆网上搜索。
课程设计报告格式
学生成绩管理系统
课程设计报告
编写人:
同组成员:
完成日期:
辅导教师:
批阅日期:
分数:
任课教师:
开课学期:
《软件技术基础》课程设计
组别
组员
课题
任务
分数
学生成绩管理系统
各种函数定义
主函数设计
课程设计排版,预处理命令设计、资料查询
错误检查,资料查询
一、功能描述
此成绩管理系统主要利用单链表实现,由如下三个功能模块实现
1、输入模块。
主要完成将学生记录存入单链表的工作。
2、查询模块。
主要完成根据学号或姓名查询学生信息。
3、输出模块。
主要完成输出表中学生信息。
4、插入模块。
插入一个学生的信息。
5、排序模块。
将表中学生按照考试成绩排列学生。
二、总体设计
1、功能模块设计
(1)主函数执行流程……
(2)输入记录模块……
(3)查询模块……
(4)插入模块……
(5)排序模块……
(6)输出记录模块……
三、数据结构设计
1、学生成绩信息结构体
structstud
{
longnum;
charname[20];
doublescore;
};
2、单链表node结构体
structstucode
{
structstudstudent;
structstucode*next;
}L;
四、函数功能描述
1.menu()
voidmenu()
{
printf("\n学生信息管理系统\n");
printf("\n菜单\n\n");
printf("\n1建立链表并显示\n");
printf("\n2查找某学号的学生信息\n");
printf("\n3查找某姓名的学生信息\n");
printf("\n4删除某学号的学生信息\n");
printf("\n5插入新的学生信息\n");
printf("\n6按分数降序排列输出\n");
printf("\n7输出\n");
printf("\n0退出\n");
printf("\n请选择您要执行的选项:
\n");
}
参数含义:
无
2.Createlist
voidcreatelist(structstucode**r)
{
structstucode*p,*t;
longn;
chara[20];
doubles;
if(*r)*r=NULL;
printf("\n请输入:
\n学号(请按学号升序排列)姓名分数(若要结束请输入三个为零)
\n");
scanf("%ld%s%lf",&n,a,&s);
if(n==0)return;
p=(L*)malloc(sizeof(L));
p->student.num=n;
strcpy(p->student.name,a);
p->student.score=s;
p->next=NULL;
*r=p;
scanf("%ld%s%lf",&n,a,&s);
while(n)
{
t=p;
p=(L*)malloc(sizeof(L));
p->student.num=n;
strcpy(p->student.name,a);
p->student.score=s;
p->next=NULL;
t->next=p;
scanf("%ld%s%lf",&n,a,&s);
}
}
参数含义:
n,学号;a[20],姓名;s,分数;p、t,定义指针变量,使其指向结构体变量stucode
3.Out
voidout(structstucode*r)
{
printf("\n\n");
if(!
r)
{
printf("没有学生信息可输出!
\n");
return;
}
while(r)
{
printf("%ld%s%.2lf\n",r->student.num,r->student.name,r->student.score);
r=r->next;
}
printf("\n\n");
}
参数含义:
r,结构体变量stucode,所用线性链表
4.search1
voidsearch1(structstucode*r)
{
longx;
if(!
r)
{
printf("没有学生信息可查询!
\n");
return;
}
printf("请输入要查询的学生信息的学生学号:
\n");
scanf("%ld",&x);
while(r&&r->student.num!
=x)
r=r->next;
if(r==NULL)
printf("Error!
Nosuchstudent!
\n");
else
printf("%ld%s%.2lf\n",r->student.num,r->student.name,r->student.score);
}
参数含义:
x,定义一个长整形变量,用于储存查找的学生信息;r,结构体变量stucode,所用线性链表
5.search2
voidsearch2(structstucode*r)
{
charm[20];
if(!
r)
{
printf("没有学生信息可查询!
\n");
return;
}
printf("请输入要查询的学生信息的学生姓名:
\n");
scanf("%s",m);
while(r&&strcmp(r->student.name,m))
r=r->next;
if(r==NULL)
printf("Error!
Nosuchstudent!
\n");
else
printf("%ld%s%.2lf\n",r->student.num,r->student.name,r->student.score);
}
参数含义:
m[20],定义一个字符数组型变量,用于储存查找的学生信息;r,结构体变量stucode,所用线性链表
6.Del
voiddel(structstucode**r)
{
longk;
structstucode*p=*r,*t;
if(!
(*r))
{
printf("没有学生信息可删除!
\n");
return;
}
printf("请输入要删除的学生信息的学生学号:
\n");
scanf("%ld",&k);
if(p->student.num==k)
*r=(*r)->next,free(p);
else
{
while(p->next&&p->next->student.num!
=k)
p=p->next;
if(p->next==NULL)
printf("Error!
Nosuchstudent!
\n");
else
{
t=p->next;
p->next=p->next->next;
free(t);
}
}
}
参数含义:
k定义一个长整形变量,用于储存删除的学生信息pt指向结构体变量stucode指针变量,用于储存数据,方便删除r结构体变量stucode,所用线性链表
7.Insert
voidinsert(structstucode**r)
{
longn;
chara[20];
doubles;
L*p,*t,*k;
printf("请输入要插入的学生信息的学生学号姓名分数:
\n");
scanf("%ld%s%lf",&n,a,&s);
p=(L*)malloc(sizeof(L));
p->student.num=n;
p->student.score=s;
strcpy(p->student.name,a);
if(!
(*r))
{
*r=p;
(*r)->next=NULL;
return;
}
if(p->student.num<(*r)->student.num)
p->next=(*r),(*r)=p;
else
{
t=*r;
k=t;
while(t->next&&t->next->student.num<=p->student.num)
t=t->next;
p->next=t->next;
t->next=p;
*r=k;
}
}
参数含义:
n,学号;a[20],姓名;s,分数;p、k、t,定义指针变量,使其指向结构体变量stucode
8.Sort
voidsort(structstucode**r)
{
structstucode*t,*p,*q,*z;
if(!
r)
{
printf("没有学生信息可排序!
\n");
return;
}
if(!
(*r)||!
(*r)->next)
return;
t=*r;
p=t->next;
t->next=NULL;
while(p)
{
q=p->next;
if(p->student.score>t->student.score)
{
p->next=t;
t=p;
}
else
{
z=t;
while(z->next&&z->next->student.score>=p->student.score)
z=z->next;
p->next=z->next;
z->next=p;
}
p=q;
}
*r=t;
}
参数含义:
p、q、t、z,定义指针变量,使其指向结构体变量stucode
9.info_daoru
voidinfo_daoru(structstucode**r)//学生信息导出文件函数
{
FILE*f_info;//定义一个指向文件的指针变量
f_info=fopen("info.cpp","r");//用fopen打开文件info.cpp
structstucode*p,*t;
p=(L*)malloc(sizeof(L));
if(*r)*r=NULL;
printf("\n\n\t正在导入...\n\n");
if(!
f_info){
printf("\n\t打开文件失败!
\n\n");
return;
}
fscanf(f_info,"%ld%s%lf",&p->student.num,&p->student.name,&p->student.score);
p->next=NULL;
*r=p;
while(!
feof(f_info)){
t=p;
p=(L*)malloc(sizeof(L));
fscanf(f_info,"%ld%s%lf",&p->student.num,&p->student.name,&p->student.score);
p->next=NULL;
t->next=p;
}//导入数据
fclose(f_info);//关闭文件
}
参数含义:
f_info,定义一个指向文件的指针变量;p,t;指向structstucode的指针变量,用于储存每一个学生信息。
五、程序实现
五、源代码分析
⑴程序预处理
包括加载头文件,定义结构体、常量和变量,并对它们进行初始化工作。
#include
#include
#include
structstud//定义一个结构体变量,结构体中含有学号、姓名、分数
{
longnum;//学号,为长整形
charname[20];//姓名、为字符型数组
doublescore;//分数、为双精度型
};
typedefstructstucode//定义一个结构体变量,结构体中含有学生信息和下一个变量的地址
{
structstudstudent;//结构体变量,包含学生信息
structstucode*next;//结构体变量,包含下一个储存单位的地址
}L;
voidmenu();//菜单函数
voidcreatelist(structstucode**r);
voidout(structstucode*r);//输出函数
voidsearch1(structstucode*r);//查找函数1
voidsearch2(structstucode*r);//查找函数2
voiddel(structstucode**r);//删除函数
voidinsert(structstucode**r);//插入函数
voidsort(structstucode**r);//排序函数
voidinfo_daoru(structstucode**r);//导入函数
voidsearch1(structstucode*r)//定义一个查找函数,根据学生的学号信息来查找
{
longx;//定义一个长整形变量,用于储存查找的学生信息
if(!
r)
{
printf("没有学生信息可查询!
\n");
return;
}
printf("请输入要查询的学生信息的学生学号:
\n");//提示输入学生信息,并将元素放到变量x中
scanf("%ld",&x);
while(r&&r->student.num!
=x)
r=r->next;//一个一个查找
if(r==NULL)
printf("Error!
Nosuchstudent!
\n");//若为空了,则显示Error!
Nosuchstudent!
else
printf("%ld%s%.2lf\n",r->student.num,r->student.name,r->student.score);//若没为空,则打印出该元素
}
voidsearch2(structstucode*r)//定义一个查找函数,根据学生的姓名信息来查找
{
charm[20];//定义一个字符数组型变量,用于储存查找的学生信息
if(!
r)
{
printf("没有学生信息可查询!
\n");
return;
}//若链表中没有任何学生信息,则显示没有学生信息可查询,并返回出来
printf("请输入要查询的学生信息的学生姓名:
\n");
scanf("%s",m);//提示输入学生信息,并将元素放到变量m[]中
while(r&&strcmp(r->student.name,m))
r=r->next;//一个一个查找
if(r==NULL)
printf("Error!
Nosuchstudent!
\n");//若为空了,则显示Error!
Nosuchstudent!
else
printf("%ld%s%.2lf\n",r->student.num,r->student.name,r->student.score);//若没为空,则打印出该元素
}
voiddel(structstucode**r)//定义一个删除函数,根据学生的学号信息来查找
{
longk;//定义一个长整形变量,用于储存删除的学生信息
structstucode*p=*r,*t;
if(!
(*r))
{
printf("没有学生信息可删除!
\n");
return;
}//若链表中没有任何学生信息,则显示没有学生信息可删除,并返回出来
printf("请输入要删除的学生信息的学生学号:
\n");
scanf("%ld",&k);//提示输入学生信息,并将元素放到变量k中
if(p->student.num==k)//从第一个开始查找
*r=(*r)->next,free(p);//若第一个元素就是,则删除此元素
else
{
while(p->next&&p->next->student.num!
=k)
p=p->next;//若不是,则一个一个查找
if(p->next==NULL)
printf("Error!
Nosuchstudent!
\n");//若没有,则显示Error!
Nosuchstudent!
else
{
t=p->next;
p->next=p->next->next;
free(t);//若某一个元素就是,则删除此元素
}
}
}
voidinsert(structstucode**r)//定义一个插入函数
{
longn;
chara[20];
doubles;//定义各个变量,用于储存信息
L*p,*t,*k;
printf("请输入要插入的学生信息的学生学号姓名分数:
\n");
scanf("%ld%s%lf",&n,a,&s);
p=(L*)malloc(sizeof(L));
p->student.num=n;
p->student.score=s;
strcpy(p->student.name,a);//把输入的信息放到p所指的L中
if(!
(*r))
{
*r=p;
(*r)->next=NULL;
return;
}//如果r所指的L中没有任何元素,则直接放进去
if(p->student.num<(*r)->student.num)
p->next=(*r),(*r)=p;
else
{
t=*r;
k=t;
while(t->next&&t->next->student.num<=p->student.num)
t=t->next;
p->next=t->next;
t->next=p;
*r=k;
}
}//比较学号大小,以便放入
voidsort(structstucode**r)
{
structstucode*t,*p,*q,*z;
if(!
r)
{
printf("没有学生信息可排序!
\n");
return;
}//若链表中没有任何学生信息,则显示没有学生信息可排序,并返回出来
if(!
(*r)||!
(*r)->next)
return;//若链表中只有一个元素,则不用排,直接返回
t=*r;
p=t->next;
t->next=NULL;
while(p)
{
q=p->next;
if(p->student.score>t->student.score)
{
p->next=t;
t=p;
}
else
{
z=t;
while(z->next&&z->next->student.score>=p->student.score)
z=z->next;
p->next=z->next;
z->next=p;
}
p=q;
}
*r=t;//比较分数大小,再排序
}
voidout(structstucode*r)//定义一个输出函数,根据学生的信息来一个一个输出
{
printf("\n\n");
if(!
r)
{
printf("没有学生信息可输出!
\n");
return;
}
while(r)
{
printf("%ld%s%.2lf\n",r->student.num,r->student.name,r->student.score);
r=r->next;
}
printf("\n\n");
}//将学生信息一个一个输出
voidmenu()
{
printf("\n学生信息管理系统\n");
printf("\n菜单\n\n");
printf("\n1建立链表并显示\n");
printf("\n2查找某学号的学生信息\n");
printf("\n3查找某姓名的学生信息\n");
printf("\n4删除某学号的学生信息\n");
printf("\n5插入新的学生信息\n");
printf("\n6按分数降序排列输出\n");
printf("\n7输出\n");
printf("\n0退出\n");
printf("\n请选择您要执行的选项:
\n");
}
voidinfo_daoru(structstucode**r)//学生信息导出文件函数
{
FILE*f_info;//定义一个指向文件的指针变量
f_info=fopen("info.cpp","r");//用fopen打开文件info.cpp
structstucode*p,*t;
p=(L*)malloc(sizeof(L));
if(*r)*r=NULL;
printf("\n\n\t正在导入...\n\n");
if(!
f_info){
printf("\n\t打开文件失败!
\n\n");
return;
}
fscanf(f_info,"%ld%s%lf",&p->student.num,&p->student.name,&p->student.score);
p->next=NULL;
*r=p;
while(!
feof(f_info)){
t=p;
p=(L*)malloc(sizeof(L));
fscanf(f_info,"%ld%s%lf",&p->student.num,&p->student.name,&p->student.score);
p->next=NULL;
t->next=p;
}//导入数据
fclose(f_info);//关闭文件
}
voidcreatelist(structstucode**r)
{
structstucode*p,*t;//定义指针变量,使其指向结构体变量stucode
longn;//定义long型变量,用于存放学号
chara[20];//定义char型变量,用于存放姓名
doubles;//定义double型变量,用于存放分数
if(*r)*r=NULL;//将链表中的信息致空
printf("\n请输入:
\n学号(请按学号升序排列)姓名分数(若要结束请输入三个为零)\n");//提示输入学号、姓名、分数
scanf(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 报告 格式