C语言课程设计学生信息管理系统教学内容.docx
- 文档编号:6303024
- 上传时间:2023-01-05
- 格式:DOCX
- 页数:22
- 大小:296.40KB
C语言课程设计学生信息管理系统教学内容.docx
《C语言课程设计学生信息管理系统教学内容.docx》由会员分享,可在线阅读,更多相关《C语言课程设计学生信息管理系统教学内容.docx(22页珍藏版)》请在冰豆网上搜索。
C语言课程设计学生信息管理系统教学内容
C语言课程设计学生信息管理系统
C语言课程设计实验报告
一、设计目的:
学生信息包括:
学号、姓名、性别、系名、班级名、出生年月、住址、电话号码。
设计一学生信息管理系统,使之能提供以下功能:
1.系统以菜单方式工作;
2.学生信息录入功能(输入);
3.学生信息浏览功能(输出);
4.学生信息检索功能;
5.学生信息的删除与修改功能;
二、总体设计思路:
1>程序设计组成框图
2>N-S流程图
三、详细设计说明:
1>头文件
#include
#include
#include
#include
2>数入口说明
main();主函数;
voidmenu();主菜单界面;
voidadd();添加新的学生信息;
voidprint(inti);打印学生信息;
voidscan();查找学生信息;
voidres();检索学生信息界面;
voidres_name();按姓名检索;
voidres_num();按学号检索;
voiddel(inti);删除学生信息;
voidmodify(inti);修改学生信息;
voidfileopen();打开文件;
voidfilesave();保存文件;
2>调用关系
4.调试与测试:
Ø编译工具
1.C/C++程序设计学习与实验系统
2.Tc
3.VC++6.0
均通过调试!
Ø主菜单
Ø添加新的学生信息
Ø浏览所有学生信息
Ø检索信息库
Ø继续查找下一条
Ø修改学生信息
Ø删除信息库所有记录
五、调试中所遇到的问题及解决方法
1>问题:
程序退出后,再次打开,上次输入的数据无法保存。
解决:
调用fileopen()与filesave()保存文件数据,方便第二次打开程序时仍能调用上次输入的数据。
2>问题:
跳出的界面与选择分支中的对应项不符合。
解决:
改getchar()为getch(),头文件中加”conio.h”.因为getchar()从输入输出流中一次只能读取一个字符,而且需要以回车来确认输入。
本文件中多次用到getchar(),键盘缓冲区的’\n’会被下次调用getchar()时接收。
而getch()则不会,从键盘上读入一个数据,不给回显,不需要回车确认,按下键就实现了函数。
3>问题:
误输入X,导致退出。
解决:
加标志变量flag=1,用while(flag)循环switch语句,当正确输入时,flag=1,跳出循环。
4>问题:
检索时只能查到第一个学生信息。
解决:
定义数组log(100)记录符合的结构体数组。
循环打印。
5>问题:
不能刷新界面。
解决:
调用system(“cls”)清屏函数。
6>问题:
删除某项信息,返回主函数时不能暂停。
解决:
调用system(“PAUSE”)暂停函数。
六、程序源码
#include"stdio.h"
#include"string.h"
#include"stdlib.h"
#include"conio.h"
voidmenu();//声明所有函数;
voidadd();
voidprint(inti);
voidscan();
voidres();
voidres_name();
voidres_num();
voiddel(inti);
voidmodify(inti);
voidfileopen();
voidfilesave();
;//定义全局变量x,减少代码量;
intn=0;//定义全局变量n,代表信息条数;
structstudent//定义结构体数组stu[100];
{
charnum[15];
charname[30];
charsex[2];
charxi[30];
charban[10];
charbirth[10];
charaddress[30];
chartel[20];
}stu[100];
voidmain()//主函数;
{
fileopen();
menu();//调用menu()函数,打开主界面;
filesave();
}
voidfileopen()//打开data文件;
{
FILE*fp;
inti;
if((fp=fopen("data","r+"))==NULL)//若无data文件,则新建;
fp=fopen("data","w+");
for(i=0;i<100;i++)//读取数据;
fread(&stu[i],sizeof(structstudent),1,fp);
fread(&n,4,1,fp);
fclose(fp);
}
voidmenu()//主菜单;
{
intflag=1;//定义标志标量flag;
system("cls");//清屏函数;
printf("┌────────────────────┐\n");//主界面;
printf("│☆欢迎登录学生信息管理系统★│\n");
printf("││\n");
printf("│1.添加新的学生信息│\n");
printf("│2.浏览所有学生信息│\n");
printf("│3.检索学生信息│\n");
printf("│4.保存并退出系统│\n");
printf("││\n");
printf("│byrlk│\n");
printf("└────────────────────┘\n");
while(flag)//防止用户误选导致退出;
switch(getch())//用switch分支选择语句;getch()获取用户键入值;
{
case'1':
flag=0;add();break;//当用户选择1时,调用add()函数,添加新的学生信息;
case'2':
flag=0;scan();break;//当用户选择2时,调用scan()函数,浏览所有学生信息;
case'3':
flag=0;res();break;//当用户选择3时,调用res()函数,检索学生信息;
case'4':
flag=0;printf("√保存成功!
");break;//当用户选择4时,调用flag()函数,退出系统;
default:
printf("※错误!
请重新输入..\n");//其它输入,提示错误;
}
}
voidadd()//信息添加函数;
{
intflag=1;
system("cls");//清屏函数;
printf("──────────%2d───────────\n",n+1);//逐一输入各项数据;
printf("*添加新的学生信息*\n");
printf("①学号:
");
scanf("%s",&stu[n].num);
printf("②姓名:
");
scanf("%s",&stu[n].name);
printf("③性别:
");
scanf("%s",&stu[n].sex);
printf("④系名:
");
scanf("%s",&stu[n].xi);
printf("⑤班级名:
");
scanf("%s",&stu[n].ban);
printf("⑥出生年月:
");
scanf("%s",&stu[n].birth);
printf("⑦住址:
");
scanf("%s",&stu[n].address);
printf("⑧电话号码:
");
scanf("%s",&stu[n].tel);
printf("──────────────────────\n");
printf("\n√添加成功!
\n\n☆请选择:
1.继续添加2.返回主菜单\n");
n++;//总信息量增加一项;
while(flag)
switch(getch())
{
case'1':
flag=0;add();break;//选择'1',重新调用add();
case'2':
flag=0;menu();break;//选择'2',调用menu(),返回主菜单;
default:
printf("※错误!
请重新输入..\n");//其它输入,提示错误;
}
}
voidprint(inti)//学生信息打印函数;
{
printf("──────────%2d──────────\n",i+1);
printf("①学号:
%s\n",stu[i].num);
printf("②姓名:
%s\n",stu[i].name);
printf("③性别:
%s\n",stu[i].sex);
printf("④系名:
%s\n",stu[i].xi);
printf("⑤班级名:
%s\n",stu[i].ban);
printf("⑥出生年月:
%s\n",stu[i].birth);
printf("⑦住址:
%s\n",stu[i].address);
printf("⑧电话号码:
%s\n",stu[i].tel);
printf("─────────────────────\n");
}
voidscan()//信息浏览函数;
{
inti,flag=1;
system("cls");
if(n==0)//当n==0时,信息库中无记录;
{
printf("──────────────────────\n");
printf("当前信息库记录为0!
\n");
printf("──────────────────────\n");
printf("☆请选择:
1.添加新的学生信息2.返回主菜单\n");
while(flag)
switch(getch())
{
case'1':
flag=0;add();break;
case'2':
flag=0;menu();break;
default:
printf("※错误!
请重新输入..\n");
}
}
else//当n不为0时,打印信息;
{
printf("**********目前信息库里共有%d条记录.*********\n",n);
for(i=0;i printf("☆请选择: 1.检索信息库2.添加新的学生信息\n"); printf("3.删除所有记录4.返回主菜单\n"); while(flag) switch(getch()) { case'1': flag=0;res();break; case'2': flag=0;add();break; case'3': flag=0; printf("\n! ! ! ! ! ! ! ! ! ! ! ! 警告: 您将删除信息库所有记录! ! ! ! ! ! ! ! ! ! ! ! \n"); printf("\n☆请选择: 1.确认删除2.返回\n"); flag=1; while(flag) switch(getch()) { case'1': flag=0;n=0;printf("√已删除! \n");system("PAUSE");scan();break; case'2': flag=0;scan(); default: printf("※错误! 请重新输入..\n"); }break; case'4': flag=0;menu();break; default: printf("※错误! 请重新输入..\n"); } } } voidmodify(inti)//信息修改函数; { intflag=1; printf("────────────────────────\n");//信息修改界面; printf("☆请输入你想修改的内容: \n"); printf("1.学号2.姓名3.性别4.系名\n"); printf("5.班级名6.出生年月7.住址8.电话号码\n"); printf("────────────────────────\n"); while(flag) switch(getch()) { case'1': flag=0;printf("请重新输入学号: ");scanf("%s",&stu[i].num);break; case'2': flag=0;printf("请重新输入姓名: ");scanf("%s",&stu[i].name);break; case'3': flag=0;printf("请重新输入性别: ");scanf("%s",&stu[i].sex);break; case'4': flag=0;printf("请重新输入系名: ");scanf("%s",&stu[i].xi);break; case'5': flag=0;printf("请重新输入班级名: ");scanf("%s",&stu[i].ban);break; case'6': flag=0;printf("请重新输入出生年月: ");scanf("%s",&stu[i].birth);break; case'7': flag=0;printf("请重新输入住址: ");scanf("%s",&stu[i].address);break; case'8': flag=0;printf("请重新输入电话号码: ");scanf("%s",&stu[i].tel);break; default: printf("※错误! 请重新输入.."); } printf("√修改成功! \n修改后的学生信息: \n"); print(i); system("PAUSE");//暂停函数: 按任意键继续..; printf("☆请选择: 1.继续修改此学生信息2.查看下一条相关信息3.返回主菜单\n"); flag=1; while(flag) switch(getch()) { case'1': flag=0;modify(i);break; case'2': flag=0;break; case'3': flag=0;menu(); default: printf("※错误! 请重新输入..\n"); } } voiddel(inti)//信息删除函数; { inta,flag=1; printf("\n! ! ! ! ! ! ! ! ! ! ! ! 警告: 您将删除此条学生信息! ! ! ! ! ! ! ! ! ! ! ! "); printf("\n☆请输入: 1.继续删除"); printf("\n2.不删除,返回主菜单\n"); while(flag) switch(getch()) { case'1': flag=0; for(a=i;a { strcpy(stu[a].num,stu[a+1].num); strcpy(stu[a].name,stu[a+1].name); strcpy(stu[a].sex,stu[a+1].sex); strcpy(stu[a].xi,stu[a+1].xi); strcpy(stu[a].ban,stu[a+1].ban); strcpy(stu[a].birth,stu[a+1].birth); strcpy(stu[a].address,stu[a+1].address); strcpy(stu[a].tel,stu[a+1].tel); } n--; printf("√删除成功! \n");//总信息量减少一项; system("PAUSE"); menu(); break; case'2': flag=0; system("PAUSE");//暂停函数: 按任意键继续..; menu();//返回主菜单; break; default: printf("※错误! 请重新输入..\n"); } } voidres_num()//按学号检索函数; { inti,j=0,flag=1,log[100]; charxh[15]; system("cls"); printf("******************************************\n"); printf("\n☆请输入要检索的学号: "); scanf("%s",&xh); for(i=0;i if(! strcmp(stu[i].num,xh))//字符串比较函数; while(j<100){log[j]=i;j++;break;}//记录下相关的信息; if(! j)//信息库中没查找到所需信息; { printf("对不起,信息库里没要你想要查找的信息! \n"); printf("\n******************************************\n"); printf("\n☆请选择: 1.继续查找2.返回主菜单\n"); while(flag) switch(getch()) { case'1': flag=0;res();break; case'2': flag=0;menu();break; default: printf("※错误! 请重新输入..\n"); } } else { printf("\n在信息库中共找到%d条相关信息..\n",j); for(i=0;i { flag=1; printf("\n第%d条\n",i+1); print(log[i]); printf("\n******************************************\n"); printf("\n☆请选择: 1.修改此学生信息2.删除此学生信息\n"); printf("3.继续查找下一条4.返回主菜单\n"); while(flag) switch(getch()) { case'1': flag=0;modify(log[i]);break; case'2': flag=0;del(log[i]);break; case'3': flag=0;break; case'4': flag=0;menu();break; default: printf("※错误! 请重新输入..\n"); } } printf("\n已到最后一条相关信息..\n"); system("PAUSE");//暂停函数: 按任意键继续..; menu(); } } voidres_name()//按姓名检索函数; { inti,j=0,flag=1,log[100]; charmz[20]; system("cls"); printf("******************************************\n"); printf("\n☆请输入要检索的姓名: "); scanf("%s",&mz); for(i=0;i if(! strcmp(stu[i].name,mz))//字符串比较函数; while(j<100){log[j]=i;j++;break;}//记录下相关的信息; if(! j)//信息库中没查找到所需信息; { printf("对不起,信息库里没要你想要查找的信息! \n"); printf("\n******************************************\n"); printf("\n☆请选择: 1.继续查找2.返回主菜单\n"); while(flag) switch(getch()) { case'1': flag=0;res();break; case'2': flag=0;menu();break; default: printf("※错误! 请重新输入..\n"); } } else { printf("\n在信息库中共找到%d条相关信息..\n",j); for(i=0;i { flag=1; printf("\n第%d条\n",i+1); print(log[i]); printf("\n******************************************\n"); printf("\n☆请选择: 1.修改此学生信息2.删除此学生信息\n"); printf("3.继续查找下一条4.返回主菜单\n"); while(flag) switch(getch()) { case'1': flag=0;modify(log[i]);break; case'2': flag=0;del(log[i]);break; case'3': flag=0;break; case'4': flag=0;menu();break; default: printf("※错误! 请重新输入..\n"); } } printf("\n※已到最后一条相关信息..\n"); system("PAUSE"); menu(); } } voidres()//检索函数; { intflag=1; system("cls"); printf("────────────────────\n");//检索界面; printf("*检索模式选择*\n"); printf("1.按学号检索\n"); printf("2.按姓名检索\n"); printf("3.返回主菜单\n"); printf("────────────────────\n"); while(flag) switch(getch()) { case'1': flag=0;res_num();break;//调用res_num()函数,按学号检索; case'2': flag=0;res_name();break;//调用res_name()函数,按姓名检索; case'3': flag=0;menu();bre
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计 学生 信息管理 系统 教学内容