1、北京信息职业技术学院 程序设计基础实训 项目名称: 学生学分管理 系 别: 计算机工程系 专 业:计算机网络技术 班 级:0922211 学生姓名: 指导教师:韦立蓉 北 京 信 息 职 业 技 术 学 院 2010年 1 月 日 一、项目背景介绍 (概要介绍此项目设计的意义和要求) 本程序为学生学分管理系统。本程序根据现实中的问题通过c语言形式编程。本程序要求能够登记学分,显示学分查询学分,修改学分,删除学分,统计学分. 二、程序功能描述: (描述基本程序中每个函数的功能,给处各函数流程图) 1、 登记单流程图
2、 开始 输入数据 是否继续输入 退出 否 2、 显示学分流程图 I=1 输出 I=2 输出 I=3 输出 I=n 输出 。。。 。。。 3、 查询学分流程图 开始 按学号查询 按姓名查询 按姓名查询 是否继续查询 退出 输出数据 显示对不起没有该信息 是否找到 显示该信息 按学号查询 按姓名查询 按姓名查询 4、 修改信息流程图 开始 按学号修改 按姓名修改 按班级修改 是否继续修改 是 退出 否 重新输入数据 5、 删除信息流程图 开始 按学号删除 按姓名
3、删除 按班级删除 是否继续删除 是 退出 否 6、 统计信息流程图 开始 是 计 算 计 算 计算出结果 是否继续统计 否 退出 需补考 专业课 的 需补考 选修课的 需补考 基础课的 需补考 人文课的 需补考 实验课的 计 算 计 算 计 算 计 算 统计能够 毕业的学生 三、设计方案介绍 (基本思想函数调用的思路介绍) 1、主流程图 学生学分管理 查询模块 显示模块 登记模块 修改模块 删除模块 统计模块 按学号查询 按学分查询 按班级查询 按姓名查询 按学号修改 按
4、学分修改 按班级修改 按学号修改 按学分修改 按班级修改 姓名 班级 基础课学分 专业课学分 选修课学分 人文类课程学分 实验性课程学分 按学分统计 按班级统计 按学号统计 显示全部 2、界面设计 (界面设计,函数的定义,功能设计、,罗列出所有需要解决的问题 函数调用问题,循环问题,查找问题,修改问题,查询问题,删除问题,比较问题。 3、变量定义 序号 变量名 变量性质(局部/全局) 功能 作用范围 1 typedef 全局 定义结构体类型 整体 2 Int 全局 定义五门课类型 整体 。.. Char 全局 定义
5、学号班级姓名类型 整体 5、函数调用的类型 四、测试与分析 (简要介绍测试的作用及意义) 测试可以知道所编写的程序是否可行,通过实际的测试可以找出程序是否符合现实。通过测试和反复修改可以使程序更加人性化。 (一)测试列表 (以表格的形式给出,不少于10个) 测试数据或执行操作 执行结果 是否正确 测试人签名 调用主菜单 显示了主菜单 正确 选择主菜单里的1 请输入学生学生信息…。 正确 输出 有重复有乱码 否 查询 无 否 修改 按学号修改……. 是 按学号查询 显示了该信息 是 按班级查询 只显示里一名同学
6、的信息 否 按学好删除 删除成功 是 须补考基础课的 所有学生信息都显示 否 可升学学生 显示了该显示的信息 是 (二)测试结果分析 (根据以下表格,如实填写并签名) bug个数 错误类型 错误原因分析 是否修改 设计者签名 1 与count声名中的类型不匹配 少了void count() 是 2 错误 jia.c 19: 表达式语法错在 main 函数中 Scanf中少了&s 是 4 错误 jia。c 31: do语句中必须有while关键字在 main 函数中 没写while 是 5 错误 jia.c
7、 30: 未定义的符号’s’在 main 函数中 上面没int I; 是 6 错误 1.c 335: 表达式语法错在 count 函数中 Switch() 括号里没有变量 是 7 五、实训总结 (总结实训过程中的所使用的知识和已实现的功能,总结自己掌握理论知识和动手能力的程度,提出自己的不足之处及改进措施) 通过这一周的实训。我们充分运用了所学的东西编出了解决实际问题的程序。我们运用了函数的调用,循环,定义,比较,查找,删除等知识。通过实际动手,我更加深入的了解了课本上的知识.同时提高了我的动手能力. 实训中我找到了我许多的不足,以前我遇到不董的
8、就会直接去问别人,不独自思考。试训中我学会了独自思考和团队合作。虽然我在编程当中遇到许多问题,但经过独自思考和学习解决了问题。最后编出了管理程序。 C语言学生学分管理程序代码 typedef struct student { char num[11],name[7],class[10]; int jichu,renwen,xuanxiu,zhuanye,shiyan; }STU; STU st[37]; static int n; void menu(); void input(); void print(); void query(); void modi();
9、 void del(); void count(); main() { int s; do{ menu(); printf(”\n\t\t\t\t 请选择:"); scanf(”%d",&s); switch(s) { case 0:break; case 1:input();break; case 2:print();break; case 3:query();break; case 4:modi();break; case 5:del();break;
10、 case 6:count();break; default:printf(”选择无效!”); } }while(s!=0); getch(); } void menu() { clrscr(); printf(”\t\t\t****************************\n"); printf("\t\t\t********欢迎您的使用********\n”); printf("\t\t\t******学生学分管理程序******\n”); printf(”\t\t\t*** 1-登记学生学分
11、 ***\n"); printf("\t\t\t*** 2-显示学生学分 ***\n”); printf(”\t\t\t*** 3—查询学生学分 ***\n”); printf(”\t\t\t*** 4—修改学生学分 ***\n”); printf(”\t\t\t*** 5—删除学生学分 ***\n"); printf("\t\t\t*** 6—统计学生学分 ***\n"); printf("\t\t\t*** 0—退出 ***\n”); printf(”\t\t\t
12、***************************\n”); } void input() { do { printf("请输入学生信息:学号 姓名 班级 基础课 专业课 选修课 人文课 实验课\n”); scanf("%s%s%s%d%d%d%d%d”,st[n].num,st[n]。name,st[n]。class,&st[n]。jichu,&st[n]。zhuanye,&st[n].xuanxiu,&st[n]。renwen,&st[n]。shiyan); n++; printf("是否继续输入?(n—退出,任意键继续):”);
13、 }while(getche()!='n’);
}
void print()
{ int i;
printf(”\n序号\t学号\t 姓名\t班级\t基础课\t专业课\t选修课\t人文课\t实验课\n”);
for(i=0;i 14、
getch();
}
void menu1()
{ clrscr();
printf("\t\t\t*****************************\n");
printf("\t\t\t***********查询模块**********\n”);
printf(”\t\t\t*** 1-按学号查询 ***\n”);
printf(”\t\t\t*** 2—按姓名查询 ***\n”);
printf("\t\t\t*** 3—按班级查询 ***\n”);
printf(”\t\t\ 15、t*** 0-退出 ***\n”);
printf("\t\t\t*****************************\n”);
}
void query1()
{ char sn[11];
int i;
printf("请输入要查询的学号:");
scanf(”%s”,sn);
for(i=0;i〈n;i++)
if(strcmp(sn,st[i]。num)==0)
{printf("\n序号\t学号\t 姓名\t班级\t基础课\t专业课\t选修课\t人文课\t实验课\n”);
print 16、f(”%2d %7s %7s %5s %4d\t%4d\t%4d\t%4d\t%4d\n",i+1,st[i].num,st[i].name,st[i].class,st[i]。jichu,st[i]。zhuanye,st[i].xuanxiu,st[i]。renwen,st[i]。shiyan);
printf(”\按任意键继续");
break;
}
else printf("\n对不起!没有该学号,任意键继续”);
getch();
}
void query2()
{ char sn[7];
i 17、nt i;
printf(”请输入要查询的姓名:”);
scanf(”%s",sn);
for(i=0;i 18、uanxiu,st[i].renwen,st[i].shiyan);
printf(”\按任意键继续”);
break;
}else printf(”\n对不起!没有该姓名,任意键继续”);
getch();
}
void query3()
{ char sn[10];
int i;
printf(”请输入要查询的班级:”);
scanf(”%s”,sn);
for(i=0;i〈n;i++)
if(strcmp(sn,st[i]。class)==0)
{printf(”\n序号\t学号\t 19、姓名\t班级\t基础课\t专业课\t选修课\t人文课\t实验课\n”);
printf(”%2d %7s %7s %5s %4d\t%4d\t%4d\t%4d\t%4d\n",i+1,st[i].num,st[i]。name,st[i]。class,st[i].jichu,st[i].zhuanye,st[i]。xuanxiu,st[i]。renwen,st[i].shiyan);
printf(”\按任意键继续”);
break;
}
else printf(”\n对不起!没有该班,任意键继续");
20、getch();
}
void query()
{ int s;
do{
menu1();
printf(”\n\t\t\t\t 请选择:”);
scanf("%d”,&s);
switch(s)
{ case 0:break;
case 1:query1();break;
case 2:query2();break;
case 3:query3();break;
default:printf("选择无效!");
}
}while(s!=0);
g 21、etch();
}
void menu2()
{ clrscr();
printf(”\t\t\t*****************************\n”);
printf(”\t\t\t***********修改模块**********\n");
printf("\t\t\t*** 1—按学号修改 ***\n");
printf("\t\t\t*** 2—按姓名修改 ***\n”);
printf(”\t\t\t*** 3-按班级修改 ***\n”);
printf(”\t\t\t*** 22、 0—退出 ***\n”);
printf("\t\t\t*****************************\n”);
}
void modi1()
{ char sn[11];
int i;
printf(”请输入要修改学分学生的学号:");
scanf(”%s”,sn);
for(i=0;i〈n;i++)
if(strcmp(sn,st[i].num)==0)
{printf(”\n序号\t学号\t 姓名\t班级\t基础课\t专业课\t选修课\t人文课\t实验课\n");
prin 23、tf("%2d %7s %7s %5s %4d\t%4d\t%4d\t%4d\t%4d\n”,i+1,st[i]。num,st[i].name,st[i]。class,st[i]。jichu,st[i]。zhuanye,st[i].xuanxiu,st[i]。renwen,st[i]。shiyan);
{printf(”请输入学生学分信息:学号 姓名 班级 基础课 专业课 选修课 人文课 实验课\n”);
scanf("%s%s%s%d%d%d%d%d”,st[i].num,st[i].name,st[i]。class,&st[i]。jichu,&st[i]. 24、zhuanye,&st[i]。xuanxiu,&st[i]。renwen,&st[i]。shiyan);
printf(”是否继续输入?(n-退出,任意键继续):”);
}while(getche()!=’n’);
break;
}
getch();
}
void modi2()
{ char sn[7];
int i;
printf("请输入要修改学分学生的姓名:”);
scanf(”%s”,sn);
for(i=0;i〈n;i++)
if(strcmp(sn,st[i]。name)==0)
25、 {printf(”\n序号\t学号\t 姓名\t班级\t基础课\t专业课\t选修课\t人文课\t实验课\n”);
printf(”%2d %7s %7s %5s %4d\t%4d\t%4d\t%4d\t%4d\n",i+1,st[i].num,st[i]。name,st[i].class,st[i]。jichu,st[i]。zhuanye,st[i]。xuanxiu,st[i]。renwen,st[i]。shiyan);
{printf(”请输入学生学分信息:学号 姓名 班级 基础课 专业课 选修课 人文课 实验课\n");
scanf 26、s%s%s%d%d%d%d%d",st[i]。num,st[i].name,st[i]。class,&st[i].jichu,&st[i]。zhuanye,&st[i].xuanxiu,&st[i]。renwen,&st[i]。shiyan);
printf(”是否继续输入?(n—退出,任意键继续):");
}while(getche()!=’n');
break;
}
getch();
}
void modi3()
{ char sn[10];
int i;
printf(”请输入要修改学分学生的班级:”);
27、scanf("%s",sn);
for(i=0;i〈n;i++)
if(strcmp(sn,st[i]。class)==0)
{printf(”\n序号\t学号\t 姓名\t班级\t基础课\t专业课\t选修课\t人文课\t实验课\n");
printf("%2d %7s %7s %5s %4d\t%4d\t%4d\t%4d\t%4d\n”,i+1,st[i]。num,st[i]。name,st[i]。class,st[i]。jichu,st[i]。zhuanye,st[i]。xuanxiu,st[i]。renwen,st[i].shiyan 28、
{printf(”请输入学生学分信息:学号 姓名 班级 基础课 专业课 选修课 人文课 实验课\n”);
scanf(”%s%s%s%d%d%d%d%d",st[i]。num,st[i].name,st[i].class,&st[i]。jichu,&st[i]。zhuanye,&st[i]。xuanxiu,&st[i]。renwen,&st[i]。shiyan);
printf(”是否继续输入?(n—退出,任意键继续):");
} while(getche()!='n');
break;
}
getch 29、
}
void modi()
{ int s;
do{
menu2();
printf(”\n\t\t\t\t 请选择:");
scanf("%d",&s);
switch(s)
{ case 0:break;
case 1:modi1();break;
case 2:modi2();break;
case 3:modi3();break;
default:printf("选择无效!”);
}
}while(s!=0);
getch 30、
}
void menu3()
{ clrscr();
printf(”\t\t\t*****************************\n");
printf("\t\t\t***********删除模块**********\n");
printf(”\t\t\t*** 1—按学号删除 ***\n”);
printf(”\t\t\t*** 2—按姓名删除 ***\n”);
printf("\t\t\t*** 3—按班级删除 ***\n");
printf("\t\t\t*** 31、 0—退出 ***\n”);
printf(”\t\t\t*****************************\n”);
}
void del1()
{ char sn[11];
int i,j;
printf(”请输入要删除学分学生的学号:”);
scanf(”%s”,sn);
for(i=0;i〈n;i++)
if(strcmp(sn,st[i]。num)==0)
{printf("\n序号\t学号\t 姓名\t班级\t基础课\t专业课\t选修课\t人文课\t实验课\n”);
printf( 32、2d %7s %7s %5s %4d\t%4d\t%4d\t%4d\t%4d\n”,i+1,st[i]。num,st[i].name,st[i].class,st[i].jichu,st[i]。zhuanye,st[i].xuanxiu,st[i]。renwen,st[i]。shiyan);
printf(”\n是否删除(任意键确认,n\取消)”);
if(getche()!=’n');
{if(i!=n—1);
for(j=i;j〈n—1;j++)
st[j]=st[j+1];
33、n--;
printf(”\n该记录已删除”);
getch();
break ;
}
}
else printf("\n对不起!没有该学号,任意键继续”);
}
void del2()
{ char sn[7];
int i,j;
printf("请输入要删除学分学生的姓名:");
scanf(”%s”,sn);
for(i=0;i〈n;i++)
if(strcmp(sn,st[i].name)==0)
{printf(”\n序号\t学号\t 34、 姓名\t班级\t基础课\t专业课\t选修课\t人文课\t实验课\n");
printf(”%2d %7s %7s %5s %4d\t%4d\t%4d\t%4d\t%4d\n”,i+1,st[i].num,st[i]。name,st[i]。class,st[i]。jichu,st[i].zhuanye,st[i]。xuanxiu,st[i].renwen,st[i].shiyan);
printf("\n是否删除(任意键确认,n\取消)”);
if(getche()!=’n');
{if(i!=n—1);
35、 for(j=i;j〈n—1;j++)
st[j]=st[j+1];
n——;
printf(”\n该记录已删除”);
getch();
break ;
}
}
else printf(”\n对不起!没有该学号,任意键继续”);
}
void del3()
{ char sn[10];
int i,j;
printf("请输入要删除学分学生的班级:”);
scanf("%s”,sn);
for(i=0;i 36、 if(strcmp(sn,st[i]。class)==0)
{printf("\n序号\t学号\t 姓名\t班级\t基础课\t专业课\t选修课\t人文课\t实验课\n”);
printf(”%2d %7s %7s %5s %4d\t%4d\t%4d\t%4d\t%4d\n",i+1,st[i]。num,st[i].name,st[i].class,st[i]。jichu,st[i]。zhuanye,st[i]。xuanxiu,st[i]。renwen,st[i].shiyan);
printf("\n是否删除(任意键确认,n\取消 37、)”);
if(getche()!='n');
{if(i!=n-1);
for(j=i;j〈n—1;j++)
st[j]=st[j+1];
n——;
printf("\n该记录已删除”);
getch();
break ;
}
}
else printf("\n对不起!没有该学号,任意键继续”);
}
void del()
{ int s;
do{
menu3();
printf(" 38、\n\t\t\t\t 请选择:");
scanf("%d",&s);
switch(s)
{ case 0:break;
case 1:del1();break;
case 2:del2();break;
case 3:del3();break;
default:printf(”选择无效!");
}
}while(s!=0);
getch();
}
void menu4()
{ clrscr();
printf(”\t\t\t********************* 39、********\n”);
printf(”\t\t\t***********统计模块**********\n”);
printf(”\t\t\t*** 1— 可升学的学生 ***\n”);
printf(”\t\t\t*** 2—需补考基础课的 ***\n");
printf(”\t\t\t*** 3—需补考专业课的 ***\n");
printf(”\t\t\t*** 4-需补考选修课的 ***\n”);
printf("\t\t\t*** 5—需补考人文课的 ***\n”);
printf(”\ 40、t\t\t*** 6-需补考实验课的 ***\n");
printf("\t\t\t*** 0—退出 ***\n”);
printf(”\t\t\t*****************************\n");
}
void count1()
{ int i;
printf(”\n序号\t学号\t 姓名\t班级\t基础课\t专业课\t选修课\t人文课\t实验课\n”);
for(i=0;i〈n;i++)
if(st[i]。jichu〉=60&st[i].zhuanye>=60&st[i].xuan 41、xiu>=60&st[i]。renwen〉=60&st[i].shiyan>=60)
printf(”%2d %7s %7s %5s %4d\t%4d\t%4d\t%4d\t%4d\n”,i+1,st[i].num,st[i].name,st[i]。class,st[i].jichu,st[i]。zhuanye,st[i]。xuanxiu,st[i]。renwen,st[i].shiyan);
getch();
}
void count2()
{ int i;
printf(”\n序号\t学号\t 姓名\t班级\t基础课\t专业课\ 42、t选修课\t人文课\t实验课\n”);
for(i=0;i〈n;i++)
if(st[i].jichu〈60&st[i]。zhuanye>=60&st[i]。xuanxiu>=60&st[i].renwen>=60&st[i]。shiyan>=60)
printf(”%2d %7s %7s %5s %4d\t%4d\t%4d\t%4d\t%4d\n",i+1,st[i]。num,st[i].name,st[i].class,st[i]。jichu,st[i]。zhuanye,st[i]。xuanxiu,st[i]。renwen,st[i]。shiyan 43、
getch();
}void count3()
{ int i;
printf(”\n序号\t学号\t 姓名\t班级\t基础课\t专业课\t选修课\t人文课\t实验课\n”);
for(i=0;i〈n;i++)
if(st[i]。jichu〉=60&st[i]。zhuanye〈60&st[i]。xuanxiu〉=60&st[i].renwen〉=60&st[i]。shiyan〉=60)
printf(”%2d %7s %7s %5s %4d\t%4d\t%4d\t%4d\t%4d\n”,i+1,st[i].num, 44、st[i]。name,st[i].class,st[i]。jichu,st[i]。zhuanye,st[i]。xuanxiu,st[i]。renwen,st[i]。shiyan);
getch();
}
void count4()
{ int i;
printf("\n序号\t学号\t 姓名\t班级\t基础课\t专业课\t选修课\t人文课\t实验课\n”);
for(i=0;i 45、hiyan〉=60)
printf(”%2d %7s %7s %5s %4d\t%4d\t%4d\t%4d\t%4d\n”,i+1,st[i]。num,st[i]。name,st[i]。class,st[i]。jichu,st[i]。zhuanye,st[i]。xuanxiu,st[i]。renwen,st[i]。shiyan);
getch();
}
void count5()
{ int i;
printf(”\n序号\t学号\t 姓名\t班级\t基础课\t专业课\t选修课\t人文课\t实验课\n”);
for(i=0;i 46、 47、6()
{ int i;
printf(”\n序号\t学号\t 姓名\t班级\t基础课\t专业课\t选修课\t人文课\t实验课\n”);
for(i=0;i〈n;i++)
if(st[i]。jichu〉=60&st[i].zhuanye〉=60&st[i]。xuanxiu〉=60&st[i]。renwen〉=60&st[i]。shiyan〈60)
printf(”%2d %7s %7s %5s %4d\t%4d\t%4d\t%4d\t%4d\n",i+1,st[i]。num,st[i]。name,st[i].class,st[i].j 48、ichu,st[i]。zhuanye,st[i].xuanxiu,st[i]。renwen,st[i].shiyan);
getch();
}
void count()
{ int s;
do{
menu4();
printf(”\n\t\t\t\t 请选择:");
scanf(”%d”,&s);
switch(s)
{ case 0:break;
case 1:count1();break;
case 2:count2();break;
case 3:count3();break;
case 4:count4();break;
case 5:count5();break;
case 6:count6();break;
default:printf(”选择无效!”);
}
}while(s!=0);
getch();
}
-15-






