实验
报告
软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载
课程 程序设计基础实验名称 课内实验共5页
系别 计算机系专业班级 姓 名 学号
实验题目:使用 C 编程实现一个学籍管理系统
1. 程序设计与分析
程序实现的功能
1.提供基本的菜单选项,能根据不同的选项执行不同操作;
2. 对学生信息进行录入信息、删除学生信息、查询信息、学生信息排序、学生信息统计输出的操作;
数据类型
学生信息:结构体数组
学生学号、班级、姓名:字符串数组
学生的三个成绩及总分:浮点型变量
用户选项、计数器:整形变量
各个功能模块:被调函数
核心算法
2. 程序设计中存在的问题和解决思路
存在问题:
1. 从调用函数返回主函数后无法再次调用主函数。
2. 全程使用数组而没用指针。
3. 不会编写退出程序的指令。
4. 一些基础性的语法错误。
解决思路:
1. 在被调函数中使用return;语句,在主函数中利用while(1)循环,使每次返回主函数均可再次调用主函数。
2. 再设置一个指向结构体的指针,利用该指针的自增输出结构体。
3. 在用户选择为退出程序时,在跳出switch函数后再利用一个break;语句跳出while循环,读取return 0;语句,退出程序。
4. 利用编译器中的build功能进行语法筛查。
3. 实验
总结
初级经济法重点总结下载党员个人总结TXt高中句型全总结.doc高中句型全总结.doc理论力学知识点总结pdf
收获:
1. 懂得了编写程序前计划好核心算法的重要性。
2. 对于调用函数有了更清楚的认识,可以更加熟练地运用return语句。
3. 更加了解结构体,熟悉了结构体指针、结构体数组。
4. 熟练掌握输入输出语句。
5. 学会分块编译程序,调试程序更加熟练。
不足:
1. 对于指针的理解不足,没有用指针做成链表进行函数间的调用。
2. 尚存在一些基础性的语法错误,这要通过复习课本、上机实验来消灭这些错误。
3. 对于调用函数掌握不足,可以尝试着做一些带返回值的函数。
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指向结构体数组*/
intchoice,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,pid,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))
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);intnum=0;
for(i=0,p=stu;i<3,pid,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;
}
}
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()//先以班级字符串大小为标准排序,再以总分大小排序,直接交换结构体
{
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,pid,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()//根据上面的结果输出学生信息
{
for(i=0,p=stu;i<3,pid,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;
}
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;
}