C语言课程设计学生信息管理系统.docx
- 文档编号:7251317
- 上传时间:2023-01-22
- 格式:DOCX
- 页数:17
- 大小:58.91KB
C语言课程设计学生信息管理系统.docx
《C语言课程设计学生信息管理系统.docx》由会员分享,可在线阅读,更多相关《C语言课程设计学生信息管理系统.docx(17页珍藏版)》请在冰豆网上搜索。
C语言课程设计学生信息管理系统
内蒙古科技大学
本科生课程设计说明书
题目:
C语言课程设计
——学生基本信息管理系统
学生姓名:
朱玉龙
学号:
1467159106
专业:
软件工程
班级:
软件一班
指导教师:
周李涌
日期:
2015年1月9日
C语言课程设计实验报告
1.设计目的:
学生信息管理系统设计
学生信息包括:
学号、姓名、年龄、电话号码、性别、出生年月、籍贯、QQ、专业、班级、奖惩信息等。
试设计一学生信息管理系统,使之能提供以下功能:
1.系统以菜单方式工作
2.学生信息添加功能---输入
3.查询功能---算法
按学号查询
按姓名查询
4.学生信息的删除与修改
5.学生信息整表浏览功能---输出
2.总体设计:
程序设计组成框图
流程图
3.详细设计:
1>函数入口说明
menu()输出主菜单
load_info()载入函数:
txt转为链表
add_info(STU*h)增加学生信息
search_info(STU*h,inttype)搜索学生信息
delete_info(STU*h)删除学生信息
update_info(STU*h)修改学生信息
output_info(STU*h)输出学生信息
preview_info(STU*h,inttype)预览学生信息
main()主函数
2>调用关系
load_info()add_info(STU*h)
search_info()output_info()
main()
update_info()
delete_info()
preview_info()output_info()
3>参数说明
add_info(STU*h)、delete_info(STU*h)、output_info(STU*h)、preview_info(STU*h,inttype)、search_info(STU*h,inttype)、update_info(STU*h)、函数中的STU*h为传入的链表节点指针,type为搜索的方式:
1为输出传入节点指针的一条学生记录,2为输出所有的学生记录。
4.调试与测试:
1>调用STU*load_info()函数(文件载入),读写出现乱码
解决方法:
更改相应指针指向,及有关变量的初值设置。
2>边界测试
解决方法:
用极端的或偏门的情况来探测和验证代码在处理时会发生什么。
3>执行窗口执行多次命令后显示过多,不利于输入指令及结果查看
解决方法:
调用系统清屏函数system("cls");。
4>文件在打开和保存时有问题。
解决方法:
调整文件的打开方式,从原来的单纯的w+修改为添加一个if语句,当没有文件时执行w+的操作,否则执行r+。
避免了原存储文件被覆盖的问题。
5.源程序清单和执行结果:
#include
#include
#include
//学生信息结构体
typedefstructrecord{
charNo[10];
charname[12];
unsignedintage;
charsex[4];
charbirth[10];
charqq[12];
chargrade[20];
charphone[11];
charjg[100];
charjcxx[100];
structrecord*next;
}STU;
//菜单函数
intmenu();
//载入函数:
txt转为链表
STU*load_info();
//增加学生
STU*add_info(STU*h);
//搜索函数
STU*search_info(STU*h,inttype);
//删除学生
STU*delete_info(STU*h);
//修改学生信息
voidupdate_info(STU*h);
//输出信息
voidoutput_info(STU*h);
//预览信息
voidpreview_info(STU*h,inttype);
voidmain()
{
STU*header=NULL,*sear=NULL;intcmd=1;
system("title学生信息管理系统");
//system("modeconcols=48lines=25");
system("date/T");
system("TIME/T");
system("color3E");
header=load_info();
//preview_info(header,2);
cmd=menu();
while(cmd!
=0)
{
switch(cmd)
{
case0:
break;
//添加信息
case1:
header=add_info(header);output_info(header);
break;
//学号查询
case2:
sear=search_info(header,1);
if(sear!
=NULL)
{
preview_info(sear,1);
}
else
printf("该学生不存在!
\n");
sear=NULL;
break;
//姓名查询
case3:
sear=search_info(header,2);
if(sear!
=NULL)
{
preview_info(sear,1);
}
else
printf("该学生不存在!
\n");
sear=NULL;
break;
//按学号删除
case4:
header=delete_info(header);
output_info(header);
break;
//修改
case5:
update_info(header);
output_info(header);
break;
//整表输出
case6:
preview_info(header,2);
break;
default:
printf("无效的命令!
\n请重新输入命令!
\n");
break;
}
if(cmd!
=0)
cmd=menu();
}
}
intmenu()
{
intcmd=0;
printf("\n感谢赵亚琼同学对我课程设计的帮助\n请输入命令:
\n\t0:
结束程序!
\n\t1:
添加记录!
\n\t2:
按学号查询!
\n\t3:
按姓名查询!
\n\t4:
按学号删除信息!
\n\t5:
按学号修改信息!
\n\t6:
整表浏览!
\n");
scanf("%d",&cmd);
while(cmd<0||cmd>9)
{
printf("无效的命令!
\n请重新输入:
\n");
scanf("%d",&cmd);
}
returncmd;
}
STU*load_info()
{
FILE*fp=fopen("d:
\\stu.txt","r+"),*fpNew=NULL;
STU*h=NULL,*q=NULL,*p=NULL;charch='0';
h=(STU*)malloc(sizeof(STU));
if(fp==NULL)
{
fpNew=fopen("d:
\\stu.txt","w");
fclose(fpNew);
returnNULL;
}
rewind(fp);
ch=fgetc(fp);
if(ch==EOF)
{
returnNULL;
}
else
{
rewind(fp);
fscanf(fp,"%10s%12s%3d%11s%4s%10s%12s%20s%20s%20s",h->No,h->name,&h->age,h->phone,h->sex,h->birth,h->qq,h->grade,h->jcxx,h->jg);
q=h;
q->next=NULL;
}
ch=fgetc(fp);
while(ch!
=EOF)
{
p=(STU*)malloc(sizeof(STU));
p->next=NULL;
fscanf(fp,"%10s%12s%3d%11s%4s%10s%12s%20s%20s%20s",p->No,p->name,&p->age,p->phone,p->sex,p->birth,p->qq,p->grade,p->jcxx,p->jg);
ch=fgetc(fp);
q->next=p;
q=q->next;
}
fclose(fp);
returnh;
}
STU*add_info(STU*h)
{
FILE*fpin=fopen("d:
\\stu.txt","a");
STU*stu,*p;
p=h;
stu=(STU*)malloc(sizeof(STU));
stu->next=NULL;
system("cls");
if(h==NULL)
{
h=stu;
printf("请输入学号:
\n");
scanf("%s",h->No);
printf("请输入姓名:
\n");
scanf("%s",h->name);
printf("请输入年龄:
\n");
scanf("%d",&h->age);
printf("请输入籍贯:
\n");
scanf("%s",h->jg);
printf("请输入手机号:
\n");
scanf("%s",h->phone);
printf("请输入性别:
\n");
scanf("%s",h->sex);
printf("请输入出生年月日:
\n");
scanf("%s",h->birth);
printf("请输入qq:
\n");
scanf("%s",h->qq);
printf("请输入专业班级:
\n");
scanf("%s",h->grade);
printf("请输入奖惩信息:
\n");
scanf("%s",h->jcxx);
}
else
{
while(p->next!
=NULL)
{
p=p->next;
}
p->next=stu;
printf("请输入学号:
\n");
scanf("%s",stu->No);
printf("请输入姓名:
\n");
scanf("%s",stu->name);
printf("请输入年龄:
\n");
scanf("%d",&stu->age);
printf("请输入籍贯:
\n");
scanf("%s",stu->jg);
printf("请输入手机号:
\n");
scanf("%s",stu->phone);
printf("请输入性别:
\n");
scanf("%s",stu->sex);
printf("请输入出生年月日:
\n");
scanf("%s",stu->birth);
printf("请输入qq:
\n");
scanf("%s",stu->qq);
printf("请输入专业班级:
\n");
scanf("%s",stu->grade);
printf("请输入奖惩信息:
\n");
scanf("%s",stu->jcxx);
}
fclose(fpin);
returnh;
}
STU*delete_info(STU*h)
{
STU*p,*q;
charno[11];
p=h;
if(p==NULL)
{
printf("\t目前还没有信息记录!
\n");
returnNULL;
}
else
{
printf("请输入一个学号:
\n");
scanf("%s",no);
q=p->next;
if(strcmp(h->No,no)==0)
{
printf("该学生信息已删除!
\n");
h=h->next;
}
else
{
while(q!
=NULL)
{
if(strcmp(q->No,no)==0)
{
printf("\t该学生的信息已删除!
\n");
p->next=q->next;
returnh;
}
else
{
p=q;
q=q->next;
}
}
printf("该学生不存在!
\n");
}
returnh;
}
}
STU*search_info(STU*h,inttype)
{
STU*p_temp=NULL,*q=h;
p_temp=(STU*)malloc(sizeof(STU));
system("cls");
switch(type)
{
case1:
printf("\t请输入一个学号:
\n\t");
scanf("%s",p_temp->No);
while(q!
=NULL)
{
if(strcmp(q->No,p_temp->No)==0)
returnq;
else
q=q->next;
}
returnNULL;
break;//按学号查询
case2:
printf("\t请输入一个名字:
\n\t");
scanf("%s",p_temp->name);
while(q!
=NULL)
{
if(strcmp(q->name,p_temp->name)==0)
returnq;
else
q=q->next;
}
returnNULL;
break;//按姓名查询
default:
returnNULL;break;
}
}
voidupdate_info(STU*h)
{
STU*q=NULL;
unsignedintcmd=1,rec=1;
system("cls");
while(rec!
=0)
{
q=search_info(h,1);
if(q==NULL)
printf("\t该学生不存在,无法进行修改操作!
\n");
else
{
cmd=1;
while(cmd!
=0)
{
system("cls");
preview_info(q,1);
printf("\n\t0:
修改完成,回主菜单!
\n\t1:
修改该学生姓名!
\n\t2:
修改该学生年龄!
\n\t3:
修改该学生手机号!
\n\t4:
修改该学生性别!
\n\t5:
修改该学生生日!
\n\t6:
修改该学生qq号!
\n\t7:
修改该学生班级!
\n\t8:
修改下一个!
\n");
printf("请输入命令:
\n\t");
scanf("%d",&cmd);
switch(cmd)
{
case0:
cmd=0;rec=0;break;
case1:
printf("\t请输入学生新的姓名:
\n\t");
scanf("%s",q->name);
break;
case2:
printf("\t请输入学生新的年龄:
\n\t");
scanf("%d",&q->age);
break;
case3:
printf("\t请输入学生新的手机号:
\n\t");
scanf("%s",q->phone);
break;
case4:
printf("\t请输入学生新的性别:
\n\t");
scanf("%s",q->sex);
break;
case5:
printf("\t请输入学生新的生日:
\n\t");
scanf("%s",q->birth);
break;
case6:
printf("\t请输入学生新的qq号:
\n\t");
scanf("%s",q->qq);
break;
case7:
printf("\t请输入学生新的班级:
\n\t");
scanf("%s",q->grade);
break;
case8:
cmd=0;
break;
}//switch结束
}//内层while结束
}
}//外层while结束
}//函数结束
voidoutput_info(STU*h)
{
FILE*fpin=fopen("d:
\\stu.txt","w");
STU*q=NULL;
q=h;
if(q!
=NULL)
{
fprintf(fpin,"%-10s%-12s%4d%11s%-4s%-8s%-11s%20s%20s%20s",q->No,q->name,q->age,q->phone,q->sex,q->birth,q->qq,q->grade,q->jcxx,q->jg);
q=q->next;
}
while(NULL!
=q)
{
fprintf(fpin,"\n%-10s%-12s%4d%11s%-4s%-8s%-11s%20s",q->No,q->name,q->age,q->phone,q->sex,q->birth,q->qq,q->grade,q->jcxx,q->jg);
q=q->next;
}
fclose(fpin);
}
voidpreview_info(STU*h,inttype)
{
STU*p=NULL;
p=h;
system("cls");
switch(type)
{
case1:
printf("=================================");
printf("\n该学生的完整信息为:
\n\t学号:
%-10s\n\t姓名:
%-12s\n\t年龄:
%-4d\n\t电话:
%-11s\n\t性别:
%-4s\n\t生日:
%-s\t\n\tQQ号:
%s\t\n\t班级:
%-s\n",h->No,h->name,h->age,h->phone,h->sex,h->birth,h->qq,h->grade);
printf("\n\t奖罚信息:
%s\n\t籍贯:
%s\n",h->jcxx,h->jg);
printf("=================================");
break;
case2:
if(p==NULL)
{
printf("文件中没有信息!
\n");
break;
}
printf("=================================");
while(p!
=NULL)
{
printf("\n\t学号:
%-10s\n\t姓名:
%-12s\n\t年龄:
%-4d\n\t电话:
%-11s\n\t性别:
%-4s\n\t生日:
%-s\t\n\tQQ号:
%s\t\n\t班级:
%-s\n",p->No,p->name,p->age,p->phone,p->sex,p->birth,p->qq,p->grade);
printf("\t奖罚信息:
%s\n\t籍贯:
%s\n",p->jcxx,p->jg);
printf("=================================");
p=p->next;
}
break;
default:
break;
}
}
6.实验心得:
1)对C语言的编程实践有所认识。
2)在遇到程序调试不通过时,会通过缩小范围的分析来锁定问题所在。
3)通过这次实验,熟悉了从自然语言转换成伪代码再转换为流程图的过程。
4)在程序中设定合适的全局变量,可以简化程序的编写难度。
5)运用函数可以减少编写时的代码量,也使程序条理清晰。
6)通过本次C语言上机实验,我们对这个介于人类与非人类之间的计算机编程语言有了一定的体验。
随着实验的成功与报告的完成,有点微微的成就感使人难忘。
伴随着学习的深入,我们发现高深的东西还有很多很多,等待着我们自己去挖掘。
对C语言的学习,我们会加倍努力。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计 学生 信息管理 系统