学生学籍管理系统课程设计4.docx

上传人:b****7 文档编号:9603425 上传时间:2023-02-05 格式:DOCX 页数:26 大小:116.21KB
下载 相关 举报
学生学籍管理系统课程设计4.docx_第1页
第1页 / 共26页
学生学籍管理系统课程设计4.docx_第2页
第2页 / 共26页
学生学籍管理系统课程设计4.docx_第3页
第3页 / 共26页
学生学籍管理系统课程设计4.docx_第4页
第4页 / 共26页
学生学籍管理系统课程设计4.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

学生学籍管理系统课程设计4.docx

《学生学籍管理系统课程设计4.docx》由会员分享,可在线阅读,更多相关《学生学籍管理系统课程设计4.docx(26页珍藏版)》请在冰豆网上搜索。

学生学籍管理系统课程设计4.docx

学生学籍管理系统课程设计4

软件设计报告

 

题目:

学生学籍管理系统

 

院系名称

电子工程学院

专业名称

电子

班级

0902

班内序号

05

学生姓名

指导教师

时间

2010年6月21日至2010年7月02日

 

一、课程设计目的

1.熟悉C语言程序的编辑、编译链接和运行的过程,至少能够用一种编译器较熟练地编辑、编译及调试程序。

2.掌握C语言数据类型,如何定义一个整型、字符型和实型的变量,以及对它们赋值的方法。

3.熟练运用if语句和switch语句以及嵌套应用。

涉及循环调用的,了解并掌握三种控制语句while、do-while和for语句。

4.学习并掌握C语言定义函数的基本方法、声明函数及调用函数的方法和过程。

5.掌握文件和文件指针的概念以及文件的定义方法,认识文件打开、关闭、读、写等文件基本操作函数。

6.掌握结构体类型变量、链表的使用。

7.了解指针和链表的概念,掌握指针的定义和使用指针变量的方法以及链表的正确用法。

灵活使用链表来储存学生信息。

8.、通过字符数组存储字符串,进一步使用字符串

二、课程设计内容

学生信息管理主要功能:

(1)能按学生的学号、姓名等完成对学生信息的录入、修改、统计、查询等功能

(2)能实现根据学号进行排序

(3)能按照学号及姓名对学生进行查询

开发工具——VisualC++

运行平台——WindowsXP

三、需求分析

对所开发系统功能、性能的描述,想要实现的目标。

系统功能:

(1)能按学号、姓名、年龄、性别、籍贯等录入学生的基本信息

(2)能进行删除,插入操作。

(3)能根据需要对学生的各项信息进行修改

(4)能根据学生的学号对所有的学生进行简单排序阅览

(5)能按照学号和姓名对学生进行查询

(6)可以保存到文件(附加功能)

(7)可以从文件读入已有的文件(附加功能)

(8)以菜单方式工作

性能描述:

各种功能都可以满足;程序相对较小,因而运行时反应比较迅速,不存在响应不及时地问题。

四、概要设计

1.系统结构图(功能模块图)

学籍管理结构图

五、详细设计及运行结果

流程图,函数之间相互调用的图示,程序设计及编码,运行结果。

定义变量

输入

正确输入

密码

错误

进入界面

重新输入

sum=read_message();

Do循环(choice!

=0)

输入数字(0~5)进行选择

Case1

print(head);break;

Case2

insert(head);break;

Case3

delet(head);;break;

Case4

fc(head);;break;

Case5

save_inf(head);;break;

Case6

findnu(head);;break;

Case7

findna(head);;break;

Case8

turn(head);;break;

Case9

case9:

count(head);break;

Case0

exit;

Clrscr();

排序模块

 

定义三个指针*p*p1*p2,

找到俩个头指针

p=p1=head->next;

p1=p1->next;

p->next=NULL;

p1!

=NULL

 

p2=p1->next;

p=head;

p->next!

=NULL&&p->next->numnum

p=p->next;

p1->next=p->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:

\xuesheng.c(30):

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

译:

'a':

未引用的局部变量。

C:

\DocumentsandSettings\user\桌面\学生信息管理系统.c(112):

warningC4700:

localvariable'num'usedwithouthavingbeeninitialized

译:

局部变量num未经初始化就被使用了

七、参考文献:

1.王曙燕主编,C语言程序设计,科学出版社,2005年

2.谭浩强,《C程序设计》,清华大学出版社2002年

3.《C语言课程设计实例精选与编程指导》,东南大学出版社

 

八、附录:

源代码

(略,详见电子版实验报告)

#include

#include

#include

#include

#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->next=NULL;

r=head;

do

{s=(structstu*)malloc(N);

printf("\n\n第%d个人的信息:

\n",i++);

printf("\n姓名:

\n");

flushall();

scanf("%s",s->name);

printf("\n学号:

\n");

flushall();

scanf("%ld",&s->num);

printf("\n年龄:

\n");

flushall();

scanf("%d",&s->age);

printf("\n性别:

\n");

flushall();

scanf("%s",s->sex);

printf("\n籍贯:

\n");

flushall();

scanf("%s",s->addr);

r->next=s;

r=s;

printf("contine?

(Y/N)");

choice=getch();

}while(choice=='Y'||choice=='y');

r->next=NULL;

return(head);

}

structstu*findnu(structstu*s)

{longnum;

printf("请输入要查的学号:

");

scanf("%ld",&num);

s=s->next;

while(s!

=NULL)

{

if(s->num==num)

{

printf("姓名学号年龄性别籍贯\n");

printf("%s%ld%d%s%s\n",s->name,s->num,s->age,s->sex,s->addr);

returns;

break;

}

s=s->next;

}

if(s==NULL)

printf("无该学生信息\n");

returnNULL;

}

structstu*findna(structstu*s)

{charname[10];

printf("请输入要查找学生的姓名:

");

scanf("%s",name);

s=s->next;

while(s!

=NULL)

{

if(strcmp(s->name,name)==0)

{

printf("姓名学号性别年龄籍贯\n");

printf("%s%ld%s%d%s\n",s->name,s->num,s->sex,s->age,s->addr);

returns;

break;

}

s=s->next;

}

if(s==NULL)

printf("无该学生信息\n");

}

structstu*fc(structstu*p)

{

structstu*s;

intchoice;

while

(1)

{

s=p;

printf("请输入要查找的信息\n");

printf("1.按学号查找\n");

printf("2.按姓名查找\n");

printf("---------------");

scanf("%d",&choice);

switch(choice)

{

case1:

s=findnu(s);break;

case2:

s=findna(s);break;

}

printf("是否对学生信息进行修改?

(y/n)");

getchar();

if(getchar()=='y')

{

printf("请输入学生新的信息!

");

printf("---------------------\n");

printf("请输入学生姓名:

\n");

scanf("%s",s->name);

printf("请输入学生学号:

\n");

scanf("%ld",&s->num);

printf("请输入学生性别:

\n");

scanf("%s",s->sex);

printf("请输入学生年龄:

\n");

scanf("%d",&s->age);

printf("请输入学生籍贯:

\n");

scanf("%s",s->addr);

}

printf("是否继续查找?

(y/n)");

getchar();

if(getchar()=='n')

break;

}

}

intdelet(structstu*s)

{

longnum;

structstu*p;

p=s->next;

if(p==NULL)

return0;

printf("请输入要删除的学号");

scanf("%ld",&num);

while(p!

=NULL)

{if(p->num==num)

{s->next=p->next;

free(p);

return1;

}

s=p;

p=p->next;

}

return0;

}

intinsert(structstu*s)

{structstu*p;

p=(structstu*)malloc(N);

printf("请输入要插入的学号姓名年龄性别籍贯\n");

scanf("%ld%s%d%s%s",&p->num,p->name,&p->age,p->sex,p->addr);

while(s->next!

=NULL&&s->next->numnum)

s=s->next;

if(s->next!

=NULL&&s->next->num==p->num)

{free(p);

return0;

}

p->next=s->next;

s->next=p;

return1;

}

voidsave_inf(structstu*h)

{structstu*s;

FILE*fp;

if((fp=fopen("e:

/xuejiguanli.txt","wt"))==NULL)

{

printf("不能打开");

return;

}

for(s=h->next;s!

=NULL;s=s->next)

{fprintf(fp,"%s%ld%d%s%s\n",s->name,s->num,s->age,s->sex,s->addr);

}printf("\n文件保存成功,按任意键返回");

getch();

fclose(fp);

}

structstu*read_inf()

{

structstu*head,*r,*s;

FILE*fp;

if((fp=fopen("e:

/xuejiguanli.txt","rt"))==NULL)

{

printf("文件未建立!

");

return(0);

}

head=(structstu*)malloc(N);

head->next=NULL;

r=head;

while(!

feof(fp))

{

s=(structstu*)malloc(N);

fscanf(fp,"%s%ld%d%s%s\n",s->name,&s->num,&s->age,s->sex,s->addr);;

r->next=s;

r=s;

}

r->next=NULL;

fclose(fp);

printf("读取文件成功!

");

getchar();

returnhead;

}

print(structstu*h)

{

structstu*s;

printf("\n该班的数据为:

\n");

printf("姓名学号年龄性别籍贯\n");

s=h->next;

while(s!

=NULL)

{

printf("%s%ld%d%s%s\n",s->name,s->num,s->age,s->sex,s->addr);

s=s->next;

}

}

turn(structstu*head)

{

structstu*p1,*p,*p2;

p=p1=head->next;

p1=p1->next;

p->next=NULL;

while(p1!

=NULL)

{

p2=p1->next;

p=head;

while(p->next!

=NULL&&p->next->numnum)

p=p->next;

p1->next=p->next;

p->next=p1;

p1=p2;

}

system("cls");

printf("\n\n排序成功!

按任意键返回主菜单!

");

flushall();

getchar();

}

count(structstu*p)

{

inti=0;

system("cls");

p=p->next;

while(p!

=NULL)

{

i++;

p=p->next;

}

printf("\n\n一共存储有%d个学生信息!

",i);

printf("\n\n按任意键返回主菜单!

");

flushall();

getchar();

}

voidlogin()

{

charmi;

chars[9];

inti;

printf("密码:

");

for(i=0;i<8;i++)

{

mi=getch();

printf("*");

s[i]=mi;

}

s[8]='\0';

printf("\n");

if(!

(strcmp(s,"11011900")))

{

system("cls");

printf("\n\n\n\n\n\n\n\n\n您已成功登陆!

");

}

else

{

system("cls");

printf("\n\n\n\n\n\n\n\n\n密码错误,您无权使用该系统!

\n\n");

exit

(1);

}

}

voidmain()

{

structstu*head;

chara[21];

intchoice;

printf("用户名");

scanf("%s",&a);

login();

if(read_inf()==0)

{

printf("文件未建立,请输入数据\n");

head=creat_inf();

save_inf(head);

}

head=read_inf();

while

(1)

{

getch();

system("CLS");

printf("\n\n★*★*★*★*★*★*★*★*★*★欢迎进入本系统★*★*★*★*★*★*★*★*★*★\n\n");

printf("*★1.显示全部学生信息\n\n");

printf("*★2.添加学生信息\t\t\t\t\t\n");

printf("*★3.删除学生信息\t\t\t\t\t\n");

printf("*★4.修改学生信息\t\t\t\t\t\n");

printf("*★5.储存文件\t\t\t\t\t\n");

printf("*★6.按学号查询学生信息\t\t\t\t\t\n");

printf("*★7.按姓名查询学生信息\t\t\t\t\t\n");

printf("*★8.按学号排序\t\t\t\t\t\n");

printf("*★8.按学号排序\t\t\t\t\t\n");

printf("*★9.统计人数\t\t\t\t\t\n");

printf("*★0.退出系统\t\t\t\

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 企业管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1