C语言课程设计学生信息管理系统
- 格式:doc
- 大小:368.50 KB
- 文档页数:17
C语言课程设计实验报告
一、设计目的: 学生信息包括:学号、姓名、性别、系名、班级名、出生年月、住址、电话号码。设计一学生信息管理系统,使之能提供以下功能: 1.系统以菜单方式工作; 2.学生信息录入功能(输入); 3.学生信息浏览功能(输出); 4.学生信息检索功能; 5.学生信息的删除与修改功能;
二、总体设计思路:
1>程序设计组成框图
主菜单 添加新的学生信息 浏览所有学生信息
检索学生信息 按学号检索 按姓名检索
修改此同学信息
删除此同学信息
检索信息添加新的学生信息 删除所有记录
保存并退出 C语言程序设计实验报告
2 2>N-S流程图
case ‘4’ case ‘3’ Case’ 2’ case ‘1’ 结束 调用add() 添加新的学生信息 fileopen() Menu() 输入选择x 调用scan() 浏览所有学生信息 退出系统 调用res() 检索学生信息
x
开始
filesave() C语言程序设计实验报告
3 三、详细设计说明: 1>头文件 #include #include #include #include
2>数入口说明 main();主函数; void menu();主菜单界面; void add();添加新的学生信息; void print(int i);打印学生信息; void scan();查找学生信息; void res();检索学生信息界面; void res_name();按姓名检索; void res_num();按学号检索; void del(int i);删除学生信息; void modify(int i);修改学生信息; void fileopen();打开文件; void filesave();保存文件;
2>调用关系
main() fileopen()
filesave() menu() add() scan() res() res_num() res_name() modify(int i) del(int i) menu() add()
menu() res() add() menu() C语言程序设计实验报告
4 4.调试与测试: ➢ 编译工具 1.C/C++程序设计学习与实验系统
2.Tc C语言程序设计实验报告
5 3.VC++6.0 均通过调试! C语言程序设计实验报告
6 ➢ 主菜单
➢ 添加新的学生信息 ➢ 浏览所有学生信息 C语言程序设计实验报告
7 ➢ 检索信息库 ➢ 继续查找下一条 C语言程序设计实验报告
8 ➢ 修改学生信息 ➢ 删除信息库所有记录 C语言程序设计实验报告
9 五、调试中所遇到的问题及解决方法 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”)清屏函数。 C语言程序设计实验报告 10 6>问题:删除某项信息,返回主函数时不能暂停。 解决:调用system(“PAUSE”)暂停函数。
六、程序源码 #include "stdio.h" #include "string.h" #include "stdlib.h" #include "conio.h" void menu(); //声明所有函数; void add(); void print(int i); void scan(); void res(); void res_name(); void res_num(); void del(int i); void modify(int i); void fileopen(); void filesave(); ; //定义全局变量x,减少代码量; int n=0; //定义全局变量n,代表信息条数; struct student //定义结构体数组stu[100]; { char num[15]; char name[30]; char sex[2]; char xi[30]; char ban[10]; C语言程序设计实验报告 11 char birth[10]; char address[30]; char tel[20]; }stu[100];
void main() //主函数; { fileopen(); menu(); //调用menu()函数,打开主界面; filesave(); }
void fileopen() //打开data文件; { FILE *fp; int i; if((fp=fopen("data","r+"))==NULL) //若无data文件,则新建; fp=fopen("data","w+"); for(i=0;i<100;i++) //读取数据; fread(&stu[i],sizeof(struct student),1,fp); fread(&n,4,1,fp); fclose(fp); }
void menu() //主菜单; { int flag=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("│ by rlk│\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"); //其它输入,提示错误; }
} void add() //信息添加函数; { int flag=1; system("cls"); //清屏函数; C语言程序设计实验报告 12 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"); //其它输入,提示错误; } }
void print(int i) //学生信息打印函数; { 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"); }
void scan() //信息浏览函数; { int i,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;