学生学籍管理系统课程设计4Word文档格式.docx
- 文档编号:22739444
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:26
- 大小:116.21KB
学生学籍管理系统课程设计4Word文档格式.docx
《学生学籍管理系统课程设计4Word文档格式.docx》由会员分享,可在线阅读,更多相关《学生学籍管理系统课程设计4Word文档格式.docx(26页珍藏版)》请在冰豆网上搜索。
程序相对较小,因而运行时反应比较迅速,不存在响应不及时地问题。
四、概要设计
1.系统结构图(功能模块图)
学籍管理结构图
;
五、详细设计及运行结果
流程图,函数之间相互调用的图示,程序设计及编码,运行结果。
定义变量
输入
正确输入
密码
错误
进入界面
重新输入
sum=read_message();
Do循环(choice!
=0)
输入数字(0~5)进行选择
Case1
print(head);
break;
Case2
insert(head);
break;
Case3
delet(head);
;
Case4
fc(head);
;
Case5
save_inf(head);
Case6
findnu(head);
Case7
findna(head);
Case8
turn(head);
Case9
case9:
count(head);
Case0
exit;
Clrscr();
排序模块
定义三个指针*p*p1*p2,
找到俩个头指针
p=p1=head->
next;
p1=p1->
p->
next=NULL;
p1!
=NULL
p2=p1->
p=head;
p->
next!
=NULL&
&
p->
next->
num<
p1->
num
p=p->
p1->
next=p->
next=p1;
p1=p2;
排序成功返回主菜单
修改模块
定义指针
按学号查choice按姓名查
调用查找函数
选择是否修改学生信息
是否
输入新信息结束
修改成功
选择是否继续修改
2.主要函数说明
structstu*creat_inf()创建一个链表,将信息存入内存,以便随时调用信息structstu*fc(structstu*p)先进行查找然后修改学生基本信息,可以通过学号、姓名来选择所要修改的对象,然后对其各项信息进行修改。
turn(structstu*head),用以对学生进行排序,主要是按照学号的由小到大的顺序进行排列,然后将排列后的学生信息输出来。
structstu*findnu(structstu*s)structstu*findna(structstu*s)
功能是查找目标。
按姓名查询和按学号查询,这是两种不同的查询方式。
intdelet(structstu*s)V功能是删除目标,根据学号找到要删除的对象,然后删除,再将删除结果输出。
structstu*read_inf()功能是将保存在文件中的学生信息读出来
voidsave_inf(structstu*h),完成信息在文件中的存储。
intinsert(structstu*s)功能是向文件中曾加一些信息。
count(structstu*p)功能是统计一下所存学生的个数
Main()
主函数,通过switch,case来选择调用模块,1~8分别为各模块的调用,0为退出程序。
六、调试情况,设计技巧及体会
1、总体过程
编译和调试工具:
选择VisualC++,该工具稳定,其中有一个强大的调试工具,我比较熟悉。
2、遇到的问题
在两周的时间里,不断地对程序及各模块进行修改、编译、调试,其间遇到很多问题,这里只选几个有代表性的具体讨论。
(1)刚开始时,由于没有想好要做的课题,就坐在电脑前发呆。
经过一段时间的考虑,终于选定了课题——学生信息管理。
于是开始构思,开始编写程序。
(2)在第一周,写程序不按章程,导致错误非常多,而又一下子找不出来,又改不出来,整个程序陷入了近乎瘫痪的状态,非常着急。
于是我决定放弃这个写了近200条的程序。
利用周六周日的时间,我重新开始写程序。
这次,我按老师的要求与建议,分模块开始独立完成。
(3)再后来剩下的5天内,一天写两个模块。
在写到排序模块时,我遇到了问题:
无法排序。
用单步跟踪后发现程序甚至无法将信息从文件中读出。
于是我将读文件的语句进行了修改,可还是不行。
思考来思考去,有看书查资料,还是没有搞清楚。
于是我请教了周围的同学,让他们来“找找错”,终于,在一位细心的同学的帮助下,问题解决了。
正确的做法是将读文件的语句fread放在与排序相独立的for循环里,这样才能将信息从文件里成功得读出。
3出现的错误:
1〉E:
\xuesheng2.c(107):
errorC2371:
'
inquire_num'
:
redefinition;
differentbasictypes
译:
重复定义;
不同的基本类型。
2〉c:
\documentsandsettings\xy\桌面\xuesheng.c(117):
errorC2065:
i'
undeclaredidentifier
未经宣布的标识符,即未定义。
3〉F:
\xuesheng.c(313):
errorC2198:
save_file'
toofewactualparameters
实参少(于形参)。
4〉C:
\DocumentsandSettings\XY\桌面\xuesheng.c(131):
warningC4013:
getch'
undefined;
assumingexternreturningint
因为程序中没有包含该函数所属的头文件。
5〉F:
\xuesheng.c(30):
warningC4047:
function'
constchar*'
differsinlevelsofindirectionfrom'
constint'
说明是参数的char*与int*类型冲突。
6〉F:
warningC4024:
strcmp'
differenttypesforformalandactualparameter2
形参和实参的类型不同。
7〉C:
\DocumentsandSettings\user\桌面\学生信息管理系统.c(167):
errorC2018:
unknowncharacter'
0xa3'
译:
未知符号。
因为中英文未转换,输入了中文标点,该调试工具不能识别。
8〉C:
\DocumentsandSettings\user\桌面\学生信息管理系统.c(75):
warningC4716:
input'
mustreturnavalue
必须有一个返回值。
C:
\DocumentsandSettings\user\桌面\学生信息管理系统.c(132):
warningC4101:
a'
unreferencedlocalvariable
'
:
未引用的局部变量。
\DocumentsandSettings\user\桌面\学生信息管理系统.c(112):
warningC4700:
localvariable'
num'
usedwithouthavingbeeninitialized
局部变量num未经初始化就被使用了
七、参考文献:
1.王曙燕主编,C语言程序设计,科学出版社,2005年
2.谭浩强,《C程序设计》,清华大学出版社2002年
3.《C语言课程设计实例精选与编程指导》,东南大学出版社
八、附录:
源代码
(略,详见电子版实验报告)
#include<
stdio.h>
stdlib.h>
string.h>
conio.h>
#defineNsizeof(structstu)
structstu
{
charname[32];
longnum;
intage;
charsex[2];
charaddr[20];
structstu*next;
};
structstu*creat_inf()
{structstu*head,*r,*s;
inti=1;
charchoice;
head=(structstu*)malloc(N);
head->
r=head;
do
{s=(structstu*)malloc(N);
printf("
\n\n第%d个人的信息:
\n"
i++);
\n姓名:
);
flushall();
scanf("
%s"
s->
name);
\n学号:
%ld"
&
s->
num);
\n年龄:
%d"
age);
\n性别:
sex);
\n籍贯:
addr);
r->
next=s;
r=s;
contine?
(Y/N)"
choice=getch();
}while(choice=='
Y'
||choice=='
y'
return(head);
}
structstu*findnu(structstu*s)
{longnum;
请输入要查的学号:
"
s=s->
while(s!
=NULL)
{
if(s->
num==num)
{
姓名学号年龄性别籍贯\n"
%s%ld%d%s%s\n"
name,s->
num,s->
age,s->
sex,s->
returns;
break;
}
s=s->
}
if(s==NULL)
无该学生信息\n"
returnNULL;
structstu*findna(structstu*s)
{charname[10];
请输入要查找学生的姓名:
name);
{
if(strcmp(s->
name,name)==0)
姓名学号性别年龄籍贯\n"
%s%ld%s%d%s\n"
returns;
}
if(s==NULL)
structstu*fc(structstu*p)
structstu*s;
intchoice;
while
(1)
s=p;
请输入要查找的信息\n"
1.按学号查找\n"
2.按姓名查找\n"
---------------"
choice);
switch(choice)
{
case1:
s=findnu(s);
break;
case2:
s=findna(s);
是否对学生信息进行修改?
(y/n)"
getchar();
if(getchar()=='
)
请输入学生新的信息!
---------------------\n"
请输入学生姓名:
请输入学生学号:
请输入学生性别:
请输入学生年龄:
请输入学生籍贯:
是否继续查找?
n'
)
intdelet(structstu*s)
structstu*p;
p=s->
if(p==NULL)
return0;
请输入要删除的学号"
while(p!
{if(p->
num==num)
{s->
free(p);
return1;
p=p->
intinsert(structstu*s)
{structstu*p;
p=(structstu*)malloc(N);
请输入要插入的学号姓名年龄性别籍贯\n"
%ld%s%d%s%s"
num,p->
name,&
age,p->
sex,p->
while(s->
num)
num==p->
{free(p);
next=s->
s->
next=p;
voidsave_inf(structstu*h)
{structstu*s;
FILE*fp;
if((fp=fopen("
e:
/xuejiguanli.txt"
"
wt"
))==NULL)
不能打开"
return;
for(s=h->
s!
=NULL;
s=s->
next)
{fprintf(fp,"
}printf("
\n文件保存成功,按任意键返回"
getch();
fclose(fp);
structstu*read_inf()
structstu*head,*r,*s;
rt"
文件未建立!
return(0);
head=(structstu*)malloc(N);
while(!
feof(fp))
s=(structstu*)malloc(N);
fscanf(fp,"
num,&
读取文件成功!
returnhead;
print(structstu*h)
\n该班的数据为:
s=h->
turn(structstu*head)
structstu*p1,*p,*p2;
p=p1=head->
while(p1!
while(p->
system("
cls"
\n\n排序成功!
!
按任意键返回主菜单!
count(structstu*p)
inti=0;
i++;
\n\n一共存储有%d个学生信息!
i);
\n\n按任意键返回主菜单!
voidlogin()
charmi;
chars[9];
inti;
密码:
for(i=0;
i<
8;
i++)
mi=getch();
*"
s[i]=mi;
s[8]='
\0'
if(!
(strcmp(s,"
11011900"
)))
\n\n\n\n\n\n\n\n\n您已成功登陆!
else
\n\n\n\n\n\n\n\n\n密码错误,您无权使用该系统!
\n\n"
exit
(1);
voidmain()
{
structstu*head;
chara[21];
用户名"
a);
login();
if(read_inf()==0)
文件未建立,请输入数据\n"
head=creat_inf();
save_inf(head);
head=read_inf();
CLS"
\n\n★*★*★*★*★*★*★*★*★*★欢迎进入本系统★*★*★*★*★*★*★*★*★*★\n\n"
*★1.显示全部学生信息\n\n"
*★2.添加学生信息\t\t\t\t\t\n"
*★3.删除学生信息\t\t\t\t\t\n"
*★4.修改学生信息\t\t\t\t\t\n"
*★5.储存文件\t\t\t\t\t\n"
*★6.按学号查询学生信息\t\t\t\t\t\n"
*★7.按姓名查询学生信息\t\t\t\t\t\n"
printf("
*★8.按学号排序\t\t\t\t\t\n"
*★9.统计人数\t\t\t\t\t\n"
*★0.退出系统\t\t\t\
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 学籍 管理 系统 课程设计