1、试验汇报 课程 程序设计基础 试验名称 课内试验 共5页 系别 计算机系 专业班级 姓 名 学号 试验题目:使用 C 编程实现一个学籍管理系统 1. 程序设计和分析 程序实现功效 1.提供基础菜单选项,能依据不一样选项实施不一样操作; 2. 对学生信息进行录入信息、删除学生信息、查询信息、学生信息排序、学生信息统计输出操作; 数据类型 学生信息:结构体数组 学生学号、班级、姓名:字符串数组 学生三个成绩及总分:浮点型变量 用户选项、计数器:整形变量 各个功效模块:被调函数 主函数 关键算法
2、 主界面——功效选择 退出 输出 排序 查找 删除 录入 2. 程序设计中存在问题和处理思绪 存在问题: 1. 从调用函数返回主函数后无法再次调用主函数。 2. 全程使用数组而没用指针。 3. 不会编写退出程序指令。 4. 部分基础性语法错误。 处理思绪: 1. 在被调函数中使用return;语句,在主函数中利用while(1)循环,使每次返回主函数均可再次调用主函数。 2. 再设置一个指向结构体指针,利用该指针自增输出结构体。 3. 在用户选择为退出程序时,在跳出switch函数后再利用一个break;语
3、句跳出while循环,读取return 0;语句,退出程序。 4. 利用编译器中build功效进行语法筛查。 3. 试验总结 收获: 1. 知道了编写程序前计划好关键算法关键性。 2. 对于调用函数有了更清楚认识,能够愈加熟练地利用return语句。 3. 愈加了解结构体,熟悉了结构体指针、结构体数组。 4. 熟练掌握输入输出语句。 5. 学会分块编译程序,调试程序愈加熟练。 不足: 1. 对于指针了解不足,没有用指针做成链表进行函数间调用。 2. 尚存在部分基础性语法错误,这要经过复习书本、上机试验来消亡这些错误。 3. 对于调用函数掌握不足,能够尝试着做部分带
4、返回值函数。
4. 源代码清单
#include
5、继续 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].
6、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
7、"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 8、0))
{
printf("%s,%s,",p->id,p->cla);
printf("%s,",p->name);
printf("%4.1f,%4.1f,%4.1f,",p->score1,p->score2,p->score3);
printf("%5.1f\n",p->sum);
}
if((strcmp(stu[i].name,find)== 0)||(strcmp(stu[i].id,find) == 0))
9、 mark=stu[i];
}
printf("continue?\n");scanf("%s",str1);
if(strcmp(str1,str2)==0) return;
else del();
}
void select()/*用find字符串数组查找用户期望查找信息,利用num作为计数器来判定是否查找到*/
{
char find[10];scanf("%s",find);int num=0;
for(i=0,p=stu;i<3,p 10、 if((strcmp(stu[i].id,find)==0)||(strcmp(stu[i].cla,find)== 0))
{
printf("%s,%s,",p->id,p->cla);printf("%s,",p->name);
printf("%4.1f,%4.1f,%4.1f,",p->score1,p->score2,p->score3);
printf("%5.1f\n",p->sum);num=num+1;
}
11、
}
if(num==0)
{printf("there is no eligible student");return;}
if(num!=0)
{
printf("continue?\n");scanf("%s",str1);
if(strcmp(str1,str2)==0) return;
else select();
}
}
void order()//先以班级字符串大小为标准排序,再以总分大小排序,直接交换结构体
{
12、 for(i=0;i<2;i++){for(j=0;j<(2-i);j++){if(strcmp(stu[j].cla,stu[j+1].cla)>0) {temp=stu[j];stu[j]=stu[j+1];stu[j+1]=temp;}}}
for(i=0;i<2;i++){for(j=0;j<(2-i);j++){if(stu[j].sum>stu[j+1].sum) {temp=stu[j];stu[j]=stu[j+1];stu[j+1]=temp;}}}
for(i=0,p=stu;i<3,p 13、 if((strcmp(stu[i].name,mark.name)!=0))
{
printf("%s,%s,",p->id,p->cla);printf("%s,",p->name);
printf("%4.1f,%4.1f,%4.1f,",p->score1,p->score2,p->score3);
printf("%5.1f\n",p->sum);
}
}
return;
}
void output()//依据上面结果输出学生信息
{
14、for(i=0,p=stu;i<3,p 15、);
}
}
return;
}
int main()
{
while(1)/*每次调用函数返回时若为真,则进入循环体、进入主界面,若用户选择为6退出,则跳出循环*/
{
homepage();
switch(choice)
{
case 1:input();break;
case 2:del();break;
case 3:select();break;
case 4:order();break;
case 5:output();break;
case 6:break;
}
if(choice==6)break;
}
return 0;
}






