实验报告
课程 程序设计基础 实验名称 课内实验 共5页
系别?计算机系 专业班级 ? 姓 名 学号
实验题目:使用 C 编程实现一个学籍管理系统
1. 程序设计与分析
程序实现的功能
1.提供基本的菜单选项,能根据不同的选项执行不同操作;
2. 对学生信息进行录入信息、删除学生信息、查询信息、学生信息排序、学生信息统计输出的操作;
数据类型
学生信息:结构体数组
学生学号、班级、姓名:字符串数组
学生的三个成绩及总分:浮点型变量
用户选项、计数器:整形变量
各个功能模块:被调函数
主函数
主函数
主界面——
主界面——功能选择
退出输出排序查找删除录入
退出
输出
排序
查找
删除
录入
2. 程序设计中存在的问题和解决思路
存在问题:
从调用函数返回主函数后无法再次调用主函数。
全程使用数组而没用指针。
不会编写退出程序的指令。
一些基础性的语法错误。
解决思路:
在被调函数中使用return;语句,在主函数中利用while(1)循环,使每次返回主函数均可再次调用主函数。
再设置一个指向结构体的指针,利用该指针的自增输出结构体。
在用户选择为退出程序时,在跳出switch函数后再利用一个break;语句跳出while循环,读取return 0;语句,退出程序。
利用编译器中的build功能进行语法筛查。
3. 实验总结
收获:
懂得了编写程序前计划好核心算法的重要性。
对于调用函数有了更清楚的认识,可以更加熟练地运用return语句。
更加了解结构体,熟悉了结构体指针、结构体数组。
熟练掌握输入输出语句。
学会分块编译程序,调试程序更加熟练。
不足:
对于指针的理解不足,没有用指针做成链表进行函数间的调用。
尚存在一些基础性的语法错误,这要通过复习课本、上机实验来消灭这些错误。
对于调用函数掌握不足,可以尝试着做一些带返回值的函数。
4. 源代码清单
#include
#include
struct Student
{
char id[10];char cla[10];char name[10];float score1;float score2;float score3;float sum;
}stu[3],mark,temp,*p;/*学生信息结构体数组,mark用来标记待删除的学生信息,temp用来交换,*p指向结构体数组*/
int choice,i, j;
char str1[10],str2[10]={"no"};//用以判断是否继续
void homepage()//输出主页面并获取用户的选项
{
printf("1.input\n2.delete\n3.select\n4.order\n5.output\n6.quit\nplease input your option\n");
scanf("%d",&choice);
}
void input()//输入学生信息
{
for(i=0;;i++,p++)
{
printf("id ");scanf("%s",&stu[i].id);
printf("class ");scanf("%s",&stu[i].cla);
printf("name ");scanf("%s",&stu[i].name);
printf("score1 ");scanf("%f",&stu[i].score1);
printf("score2 ");scanf("%f",&stu[i].score2);
printf("score3 ");scanf("%f",&stu[i].score3);
stu[i].sum=stu[i].score1+stu[i].score2+stu[i].score3;
printf("continue?\n");scanf("%s",str1);
if(strcmp(str1,str2)==0)break;
}
return;
}
void del()//用指针将数据输出,将用户想找到的学生信息进行标记
{
char find[10];scanf("%s",find);
for(i=0,p=stu;i<3,p
{
if((strcmp(stu[i].name,find)!= 0)&&(strcmp(stu[i].id,find) != 0))
{