学籍管理系统说明书.docx
- 文档编号:2988121
- 上传时间:2022-11-16
- 格式:DOCX
- 页数:46
- 大小:239.11KB
学籍管理系统说明书.docx
《学籍管理系统说明书.docx》由会员分享,可在线阅读,更多相关《学籍管理系统说明书.docx(46页珍藏版)》请在冰豆网上搜索。
学籍管理系统说明书
实践教学
*******************
兰州理工大学
计算机与通信学院
2010年春季学期
数据结构课程设计
题目:
专业班级:
姓名:
学号:
指导教师:
成绩:
目录
摘要……………………………………………………………………………3
序言……………………………………………………………………………4
1.采用类c语言定义相关的数据类型……………………………………5
2.各模块的伪码算法………………………………………………………6
3.函数的调用关系图……………………………………………………..10
4.调试分析………………………………………………………………..12
5.测试结果………………………………………………………………..12
总结…………………………………………………………………………..38
参考资料………………………………………………………………………..39
致谢………………………………………………………………………..39
附件Ⅰ源程序代码……………………………………………………………40
摘要
学籍管理涉及到的操作算法都是以链表或顺序表的基本运算做为基础的,此程序包括了:
录入学生记录,浏览学生记录,添加学生记录,删除学生记录,修改学生记录,对各学生记录的查找和排序的功能。
通过链表存储结构实现数据的输入,实现各子程序过程的演示,对异常输入信息报错。
关键字:
学籍管理的演示,学生信息的建立,浏览,插入,删除,查找和排序。
序言
很多涉及学籍管理的算法都是以链表操作为基础,通过链表的建立,结点添加、查询与删除的演示,方便在学习中更好的理解链表结点的添加、删除和查询的过程。
通过对链表的建立,结点的添加、查询与删除的演示,我们在对一些问题就行求解时,会发现有些问题很难找到规律或根本无规律可寻。
对于这样的问题,可以利用计算机运行速度快的特点,先搜索查找所有可能出现的情况,再根据题目条件从所有可能的情况中,删除那些不符合条件的结点。
在链表的建立算法中,在链表的第一个结点之前附设一个结点,称之为头结点。
头结点的数据域可以不存储任何信息,也可存储如线性表的长度等类的附加信息,头结点的指针域存储指向第一个结点的指针。
在插入结点的过程中,首先要生成一个数据域为X的结点,然后插入在链表中。
根据插入操作的逻辑定义,还需要修改结点的指针域。
在删除结点的过程中,首先查找到要删除的结点,然后删除,再修改结点的指针域。
总之,在一单链表中插入或删除一个结点算法实现时,仅需修改指针而不需要移动元素,因此它没有顺序存储结构所具有的弱点,所以在计算机实现多种算法中得到了广泛的应用。
1.采用类c语言定义相关的数据输入
#defineNAMELEN8/*姓名最大长度*/
#defineXIBIELEN10/*系别名最大长度*/
#defineZHUANYLEN10/*专业名最大长度*/
#defineJIGUANLEN10/*籍贯名最大长度*/
typedefstructstudent/*记录的结构*/
{
charname[NAMELEN+1];
longnum;
charsex;
intage;
charxibie[XIBIELEN+1];
charzhuanye[ZHUANYELEN+1];
charjiguan[JIGUANLEN+1];
}ElemType;
typedefstructLNode
{
ElemTypedata;
structLNode*next;
}*LinkList;
主要函数有;
voidmain()
intInitList()
intListTraverse(L)
voidInsertSnumber()
voidReadInKeyboard(structstudent*e)
intFindStudentNum()
intFindStudentName()
intDeleteStudentNum()
intDeleteStudentName()
voidModifySC()
2各模块流程图及伪码算法
(1)构造一个空的线性表的算法
intInitList(LinkList*L)
{
*L=(LinkList)malloc(sizeof(structLNode));/*产生头结点,并使L指向此头结点*/
if(!
*L)/*存储分配失败*/
exit(OVERFLOW);
(*L)->next=NULL;/*指针域为空*/
returnOK;
}
(2)对L的每个数据元素输入
intListTraverse(LinkListL,void(*vi)(ElemType))
{/*初始条件:
线性表L已存在*/
LinkListp=L->next;
while(p)
{
vi(p->data);
p=p->next;
}
printf("\n");
returnOK;
}
(3)插入新学生
voidInsertSnumber(LinkListL,ElemTypee)
{/*按学号非降序插入*/
LinkListq=L,p=L->next;
while(p&&e.num>p->data.num)
{
q=p;
p=p->next;
}
q->next=(LinkList)malloc(sizeof(structLNode));/*插在q后*/
q->next->data=e;
q->next->next=p;
}
(4)显示记录
voidprint(structstudente)
{
printf("%-8s%6ld",e.name,e.num);
if(e.sex=='m')
printf("男");
else
printf("女");
printf("%5d%-10s%10%10",e.age,e.xibie,e.zhuanye,e.jiguan);
}
(5)输入结点信息
voidReadInKeyboard(structstudent*e)
{/*由键盘输入结点信息*/
printf("请输入姓名(<=%d个字符):
",NAMELEN);
scanf("%s",e->name);
printf("请输入学号:
");
scanf("%ld",&e->num);
printf("请输入性别(输入字母m:
男f:
女):
");
scanf("%*c%c",&e->sex);
printf("请输入年龄:
");
scanf("%d",&e->age);
printf("请输入系别(<=%d个字符):
",XIBIELEN);
scanf("%s",e->xibie);
printf("请输入专业(<=%d个字符):
",ZHUANYELEN);
scanf("%s",e->zhuanye);
printf("请输入籍贯(<=%d个字符):
",JIGUANLEN);
scanf("%s",e->jiguan);
}
(6)查找学号为num结点
intFindStudentNum(LinkListL,longnum,LinkList*p,LinkList*q)
{
/*并返回TRUE;如无此元素,则返回FALSE*/
*p=L;
while(*p)
{
*q=(*p)->next;
if(*q&&(*q)->data.num>num)/*因为是按学号非降序排列*/
break;
if(*q&&(*q)->data.num==num)/*找到该学号*/
returnTRUE;
*p=*q;
}
returnFALSE;
}
(7)查找姓名为name的结点
intFindStudentName(LinkListL,charname[],LinkList*p,LinkList*q)
{/*查找表中姓名为name的结点,如找到,q指向此结点,p指向q的前驱,*/
/*并返回TRUE;如无此元素,则返回FALSE*/
*p=L;
while(*p)
{
*q=(*p)->next;
if(*q&&!
strcmp((*q)->data.name,name))/*找到该姓名*/
returnTRUE;
*p=*q;
}
returnFALSE;
}
(8)删除表中学号为num的元素
intDeleteStudentNum(LinkListL,longnum)
{/*删除表中学号为num的元素,并返回TRUE;如无此元素,则返回FALSE*/
LinkListp,q;
if(FindStudentNum(L,num,&p,&q))/*找到此结点,且q指向其,p指向其前驱*/
{
p->next=q->next;
free(q);
returnTRUE;
}
returnFALSE;
}
(9)删除表中姓名为name的元素
intDeleteStudentName(LinkListL,charname[])
{/*删除表中姓名为name的元素,并返回TRUE;如无此元素,则返回FALSE*/
LinkListp,q;
if(FindStudentName(L,name,&p,&q))/*找到此结点,且q指向其,p指向其前驱*/
{
p->next=q->next;
free(q);
returnTRUE;
}
returnFALSE;
}
(10)修改结点内容
voidModifySC(ElemType*e)
{/*修改结点内容*/
chars[80];
print(*e);/*显示原内容*/
printf("请输入待修改项的内容,不修改的项按回车键保持原值:
\n");
printf("请输入姓名(<=%d个字符):
",NAMELEN);
gets(s);
if(strlen(s))
strcpy(e->name,s);
printf("请输入学号:
");
gets(s);
if(strlen(s))
e->num=atol(s);
printf("请输入性别(输入字母m:
男f:
女):
");
gets(s);
if(strlen(s))
e->sex=s[0];
printf("请输入年龄:
");
gets(s);
if(strlen(s))
e->age=atoi(s);
printf("请输入系别(<=%d个字符):
",XIBIELEN);
gets(s);
if(strlen(s))
strcpy(e->xibie,s);
printf("请输入专业(<=%d个字符):
",ZHUANYELEN);
gets(s);
if(strlen(s))
strcpy(e->zhuanye,s);
printf("请输入籍贯(<=%d个字符):
",JIGUANLEN);
gets(s);
if(strlen(s))
strcpy(e->jiguan,s);
/*修改完毕*/
}
3.函数的调用关系图
4.调试分析
(1)在程序的运行过程中存在着很的错误,大多数都是逻辑错误在寻找的过程比语法错误更难发现,在此过程中得到很
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学籍 管理 系统 说明书
![提示](https://static.bdocx.com/images/bang_tan.gif)