C语言程序设计学生籍贯信息记录簿.docx

上传人:b****5 文档编号:5795494 上传时间:2023-01-01 格式:DOCX 页数:24 大小:335.89KB
下载 相关 举报
C语言程序设计学生籍贯信息记录簿.docx_第1页
第1页 / 共24页
C语言程序设计学生籍贯信息记录簿.docx_第2页
第2页 / 共24页
C语言程序设计学生籍贯信息记录簿.docx_第3页
第3页 / 共24页
C语言程序设计学生籍贯信息记录簿.docx_第4页
第4页 / 共24页
C语言程序设计学生籍贯信息记录簿.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

C语言程序设计学生籍贯信息记录簿.docx

《C语言程序设计学生籍贯信息记录簿.docx》由会员分享,可在线阅读,更多相关《C语言程序设计学生籍贯信息记录簿.docx(24页珍藏版)》请在冰豆网上搜索。

C语言程序设计学生籍贯信息记录簿.docx

C语言程序设计学生籍贯信息记录簿

学院

程序设计工程训练报告

C语言程序设计学生籍贯信息记录簿

课程名称C语言程序设计工程训练

姓名

院(系)信息科学与技术学院

专业班级

学号

指导教师

 

教务处制

目录

1需求分析1

2系统总框图和功能模块说明1

2.1系统总框图1

2.2功能模块说明2

3系统设计2

3.1主要结构体2

3.2主要功能函数2

3.3关键函数的流程图4

4系统调试5

5总结8

6源程序清单9

1需求分析

编制一个学生籍贯信息记录簿,每个学生信息包括:

学号、姓名、籍贯。

具体功能:

1、创建信息链表并以磁盘文件保存

2、读取磁盘文件并显示输出所有学生的籍贯信息

3、按学号或姓名查询其籍贯

4、按籍贯查询并输出该籍贯的所有学生

5、能添加、删除和修改学生的籍贯信息

6、系统以菜单方式工作

2系统总框图和功能模块说明

2.1系统总框图

图1系统总框图

2.2功能模块说明

系统初始化模块:

完成系统初始化。

创建信息链表模块:

在本地创建学生籍贯文件,保存学生籍贯信息。

输入学生信息模块:

完成学生籍贯信息的录入。

修改学生信息模块:

完成学生籍贯信息的修改。

查询学生信息模块:

完成学生籍贯信息的查询。

删除学生信息模块:

完成学生籍贯信息的删除。

重置学生信息模块:

完成学生籍贯信息的重置。

保存学生信息模块:

完成学生籍贯信息的保存。

3系统设计

3.1主要结构体

学生信息:

学号、姓名、籍贯

typedefstruct

{shortzhku_status;

charzhku_number[12];

charzhku_name[10];

charzhku_address[20];

}StuType;

3.2主要功能函数

voidzhku_AddData(void)/*录入数据*/

voidwxw_ListData(void)/*显示所有数据*/

voidwp_Delete(void)/*做删除标记*/

voidwp_Pack(void)/*重置信息*/

voidzhku_UpdateData(void)/*修改*/

voidSH_Search(void)/*查询*/

3.3关键函数的流程图

4系统调试

打开程序后按任意键,将会出现上述界面。

 

按“1”键,再按回车键,出现以上录入菜单。

录入成功后提示是否继续,选择后按回车键进行操作。

 

此为查询功能菜单,若输入程序没有录入的学号、姓名、籍贯时,则会显示出“无此人的籍贯信息”。

 

此为删除学生信息菜单界面,按照菜单操作即可。

 

如果要退出该程序,直接按“7”后在按回车键即可。

 

5总结

这次我做的c语言工程实训是“籍贯信息记录簿”,在编写程序时也遇到不少的困难。

其中最困扰我的文件操作方面,因为是记录簿程序,所以文件方面用得较多。

通过再回去认真的复习一遍相关知识后,终于完成了各个模块的编写。

因为这次的程序细分为

voidzhku_AddData(void)/*录入数据*/

voidwxw_ListData(void)/*显示所有数据*/

voidwp_Delete(void)/*做删除标记*/voidwp_Pack(void)/*重置信息*/

voidzhku_UpdateData(void)/*修改*/voidSH_Search(void)*查询*/

六个模块,在完成了全部模块的编写后,又一个困扰我的问题出现了-----就是各模块功能完整,到整合在一起组建时却发生了错误。

经过半天的排查,发现有些模块用了全局变量,致使程序发生错误。

再删除掉全局变量后,程序经过简单的修改又重生了。

总的来说,这次实训给了我亲手完成一个简单系统的编写,经过需求分析、系统总框图和功能模块明、系统设计、系统调试等几个流程,让我实实在在地体验了一番写程序的过程。

同时也发现自己的水平还很有限,应该再加把劲学习好计算机编程。

6源程序清单

#include"stdio.h"//标准输入输出文件包含预处理命令

#include"stdlib.h"

#include"string.h"//字符串文件包含预处理命令

#include"conio.h"

#include"ctype.h"//包含tolower()的原型

 

typedefstruct

{shortzhku_status;

charzhku_number[10];

charzhku_name[10];

charzhku_address[20];

}StuType;

 

FILE*fp;

 

voidzhku_AddData(void)/*录入数据*/

{

chara;

StuTypestu;

charzhku_tag;

stu.zhku_status=0;

do

{

printf("\n\n\n\n*****按ESC返回主菜单*****\n");

printf("\n\n*****按Space确认开始录入信息*****\n");

printf("\n\n请输入学生学号:

");

if((a=getch())==27)return;/*这个函数可以让用户按下任意键而不需要回车就可以接受到用户的输入*/

scanf("%s",stu.zhku_number);

while(stu.zhku_number==NULL)

{

printf("输入非法,重新输入:

");

//zhku_tag=getchar();

scanf("%s",stu.zhku_number);

//while(getchar()!

='\n');

}

printf("\n请输入学生姓名:

");

scanf("%s",stu.zhku_name);

while(stu.zhku_number==NULL)

{

printf("输入非法,重新输入:

");

//zhku_tag=getchar();

scanf("%s",stu.zhku_number);

//while(getchar()!

='\n');

}

printf("\n请输入学生籍贯:

");

while(stu.zhku_number==NULL)

{

printf("输入非法,重新输入:

");

//zhku_tag=getchar();

scanf("%s",stu.zhku_number);

//while(getchar()!

='\n');

}

scanf("%s",stu.zhku_address);

fseek(fp,0,SEEK_END);//移动文件内部位置指针

fwrite(&stu,sizeof(StuType),1,fp);//将信息存入文件中

printf("\n录入成功,继续吗?

(y/n):

");

while(getchar()!

='\n');//跳过当前行

//zhku_tag=getchar();

scanf("%s",&zhku_tag);//大写字母转化为小写字母

zhku_tag=tolower(zhku_tag);

while(zhku_tag!

='y'&&zhku_tag!

='n')

{

printf("输入非法,重新输入(y/n):

");

while(getchar()!

='\n');

//zhku_tag=getchar();

scanf("%s",&zhku_tag);

zhku_tag=tolower(zhku_tag);

}

}while(zhku_tag=='y');

printf("\n\n\n\n*****按ESC返回主菜单*****\n\n\n\n\n\n\n");

do{

a=getch();

}while(a!

=27);return;

}

 

voidwxw_ListData(void)/*显示所有数据*/

{

chara;

StuTypestu;

stu.zhku_status=0;

 

printf("\n%-15s%-15s%-25s\n","学号","姓名","籍贯");

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

rewind(fp);

fread(&stu,sizeof(StuType),1,fp);//读入信息

while(!

feof(fp))//文件未结束

{

if(stu.zhku_status==0)

{

printf("%-15s%-15s%-25s\n",stu.zhku_number,stu.zhku_name,stu.zhku_address);

}

fread(&stu,sizeof(StuType),1,fp);

}

clearerr/*复位错误标志(清除文件结束标志)*/(fp);

printf("\n\n\n\n*****按ESC返回主菜单*****\n\n\n\n\n\n\n");

do{

a=getch();

}while(a!

=27);return;

}

voidwp_Delete(void)/*做删除标记*/

{charelc;

chara;

StuTypestu;

charwp_number[10];

printf("\n*****请选择要删除的方式*****\n\n");

printf("[1].删除个人信息\n\n");

printf("[2].删除全部信息\n\n");

printf("\n\n*****按ESC返回主菜单*****\n");

printf("\n*****按Space确认开始功能选择*****\n\n");

printf("\n请选择功能:

");

if((a=getch())==27)return;

scanf("%s",&elc);

switch(elc)

{

case'1':

{printf("\n输入要删除的学生学号:

");

scanf("%s",wp_number);

rewind(fp);//使位置指针返回到文件的开头

fread(&stu,sizeof(StuType),1,fp);

while(!

feof(fp))

{

if(strcmp(stu.zhku_number,wp_number)==0&&stu.zhku_status==0)//数据状态正常,未作删除标志

break;

fread(&stu,sizeof(StuType),1,fp);

}

if(!

feof(fp))

{

printf("\n\n被删除的记录为:

\n");

printf("\n%-15s%-15s%-25s\n","学号","姓名","籍贯");

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

printf("%-15s%-15s%-25s\n",stu.zhku_number,stu.zhku_name,stu.zhku_address);//输出信息

printf("\n删除成功,请重置信息!

\n");

stu.zhku_status=1;

fseek(fp,-sizeof(StuType),SEEK_CUR);//把文件的位置指针从当起始点开始,移动指定位移量的字节数。

成功返回0,失败返回非0

fwrite(&stu,sizeof(StuType),1,fp);

}

else

{

printf("无此学号的学生!

\n");

clearerr(fp);

}

printf("\n\n\n\n*****按ESC返回主菜单*****\n");

do{

a=getch();

getchar();

}while(a!

=27);return;}break;

case'2':

{fclose(fp);

remove("input.dat");

if((fp=fopen("input.dat","rb+"))==NULL)

{

if((fp=fopen("input.dat","wb+"))==NULL)

{printf("打开文件失败!

\n");

system("PAUSE");

exit

(1);

}

}

printf("\n删除成功,请重置信息!

\n");

printf("\n\n\n\n*****按ESC返回主菜单*****\n");

do{a=getch();}while(a!

=27);return;

}break;

}

}

voidwp_Pack(void)/*重置信息*/

{

StuTypestu;

FILE*fpTmp;

if((fpTmp=fopen("xuesheng_tmp.dat","wb"))==NULL)//打开文件xueshneg_tmp.dat失败

{

printf("打开文件xueshneg_tmp.dat失败!

\n");

system("PAUSE");

exit

(2);

}

rewind(fp);//使位置指针返回到文件的开头

fread(&stu,sizeof(StuType),1,fp);//读入信息

while(!

feof(fp))

{

if(stu.zhku_status==0)

fwrite(&stu,sizeof(StuType),1,fpTmp);//写入信息

fread(&stu,sizeof(StuType),1,fp);//继续读入信息

}

fclose(fp);fclose(fpTmp);//关闭文件

remove("input.dat");//删除文件

rename("xuesheng_tmp.dat","input.dat");//更改文件名

if((fp=fopen("input.dat","rb+"))==NULL)

{printf("打开文件失败!

\n");

system("PAUSE");

exit(3);

}

}

 

voidzhku_UpdateData(void)/*修改*/

{

chara;

StuTypestu;

charzhku_number[10];

printf("\n\n\n\n*****按ESC返回主菜单*****\n\n");

printf("输入要修改的学生的学号:

");

if((a=getch())==27)return;

scanf("%s",zhku_number);

rewind(fp);

fread(&stu,sizeof(StuType),1,fp);

while(!

feof(fp))

{

if(strcmp(stu.zhku_number,zhku_number)==0

&&stu.zhku_status==0)

break;

fread(&stu,sizeof(StuType),1,fp);

}

if(!

feof(fp))

{

printf("\n%-15s%-15s%-25s\n","学号","姓名","籍贯");

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

printf("%-15s%-15s%-25s\n",stu.zhku_number,stu.zhku_name,stu.zhku_address);

printf("\n输入修改后的数据:

\n");

printf("\n学生学号:

");

scanf("%s",stu.zhku_number);

printf("\n学生姓名:

");

scanf("%s",stu.zhku_name);

printf("\n籍贯:

");

scanf("%s",stu.zhku_address);

fseek(fp,-sizeof(StuType),SEEK_CUR);

fwrite(&stu,sizeof(StuType),1,fp);

printf("\n\n修改成功,请重置信息!

");

printf("\n\n*****按ESC返回主菜单*****\n");

}

else

{

printf("\n无此学号的学生!

\n\n\n");

clearerr(fp);

}

do{

a=getch();

getchar();

}while(a!

=27);return;

}

 

voidSH_Search(void)/*查询*/

{

chara;

charSH_tag;

StuTypestu;

charSH;

charSH_number[10];

charSH_name[10];

charwxw_address[20];

 

do{

printf("[1].按学号查询\n\n");

printf("[2].按姓名查询\n\n");

printf("[3].按籍贯查询\n\n");

printf("\n\n*****按ESC返回主菜单*****\n\n");

printf("请选择:

\n\n");

//getchar();

if((a=getch())==27)

return;

scanf("%s",&SH);

while(SH<'1'||SH>'3')

{

printf("输入错误,请输入1~3的数:

");

scanf("%s",&SH);

}

switch(SH)

{

case'1':

printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n输入要查询的学生的学号:

\n");

scanf("%s",SH_number);

rewind(fp);

fread(&stu,sizeof(StuType),1,fp);

while(!

feof(fp))

{

if(strcmp(stu.zhku_number,SH_number)==0

&&stu.zhku_status==0)

break;

fread(&stu,sizeof(StuType),1,fp);

}

 

if(!

feof(fp))

{

rewind(fp);

printf("%-15s%-15s%-25s\n","姓名","学号","籍贯");

while(!

feof(fp))

{

fread(&stu,sizeof(StuType),1,fp);

if(feof(fp))break;

if(strcmp(stu.zhku_number,SH_number)==0

&&stu.zhku_status==0)

{

printf("%-15s%-15s%-25s\n",stu.zhku_name,stu.zhku_number,stu.zhku_address);

}

}

 

}

else

{

printf("无此人的籍贯信息!

\n");

clearerr(fp);

}

break;

case'2':

printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n输入要查询的学生的姓名:

\n");

scanf("%s",SH_name);

rewind(fp);

fread(&stu,sizeof(StuType),1,fp);

while(!

feof(fp))

{

if(strcmp(stu.zhku_name,SH_name)==0

&&stu.zhku_status==0)

break;

fread(&stu,sizeof(StuType),1,fp);

}

 

if(!

feof(fp))

{

rewind(fp);

printf("%-15s%-15s%-25s\n","姓名","学号","籍贯");

while(!

feof(fp))

{

fread(&stu,sizeof(StuType),1,fp);

if(feof(fp))break;

if(strcmp(stu.zhku_name,SH_name)==0

&&stu.zhku_status==0)

{

printf("%-15s%-15s%-25s\n",stu.zhku_name,stu.zhku_number,stu.zhku_address);

}

}

}

else

{

printf("无此人的籍贯信息!

\n");

clearerr(fp);

}

break;

case'3':

printf("\n输入要查询的学生的籍贯:

\n");

scanf("%s",wxw_address);

rewind(fp);

fread(&stu,sizeof(StuType),1,fp);

while(!

feof(fp))

{

if(strcmp(stu.zhku_address,wxw_address)==0

&&stu.zhku_status==0)break;

fread(&stu,sizeof(StuType),1,fp);

}

if(!

feof(fp))

{

rewind(fp);

printf("%-15s%-15s%-25s\n","姓名","学号","籍贯");

while(!

feof(fp))

{

fread(&stu,sizeof(S

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

当前位置:首页 > 高中教育 > 英语

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

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