武汉职业技术学院
C语言程序设计实训报告
20##—20##学年第二学期
系 部:计算机
姓 名: 刘丹
班 级:网络10307班
学 号:10CJ568
课 程:C语言
指导老师:贾学斌
实训名称:《C语言程序设计》
实训地点:凌峰楼B座511
实训时间:二〇##年五月三十日—六月三日
课程设计项目一
一、 课程设计名称:学生成绩管理系统
二、 课程设计目的: 1.复习巩固C语言学过的知识
2.了解较大应用程序的综合处理方法
三、课程设计要求:1.以文本菜单界面选择功能
2.输出格式须对齐成表,有输入输出提示信息
和成绩输入过程,并有注释
3.各个功能须以函数形式实现
4.学生人数和课程数可以自定义
四、课程设计内容:
输入N个学生5门课程的成绩,分别用函数实现:①学生成绩的输入 ②学生
成绩的修改 ③可根据学号查询其成绩及排名 ④每个课程的平均分⑤课程的总分
五、程序代码:
#include <conio.h>
#include <stdio.h>
FILE *fp;
int a[100][10]; /*定义一个二位数组用来存放学生成绩*/
int stu;
inputx()
{
gotoxy(15,13);
textcolor(RED);
printf("请输入你们班的学生数:");
scanf("%d",&stu);
}
input() /*输入学生成绩*/
{
int i;
for(i=1;i<=stu;i++)
{ scanf("%8d%8d%8d%8d%8d%8d",&a[i][1],&a[i][2],&a[i][3],&a[i][4],&a[i][5],&a[i][6]);
}
}
print1() /*输出成绩表,并求总分,平均分和排名次*/
{
int i,j;
int b[100],c[100];
int t,loc,k;
fp=fopen("成绩表.txt","w");
for(i=1;i<=stu;i++) /*求总分和平均分*/
{
a[i][7]=0;
for(j=2;j<=6;j++)
a[i][7]=a[i][7]+a[i][j];
a[i][8]=a[i][7]/5;
}
for(i=1;i<=stu;i++) /*排名*/
{
b[i]=a[i][7];
c[i]=i;
}
for(i=1;i<=stu-1;i++)
{
loc=i;
for(j=i+1;j<=stu;j++)
if(b[j]>b[loc])
loc=j;
if(loc!=i)
{t=b[i];b[i]=b[loc];b[loc]=t;
t=c[i];c[i]=c[loc];c[loc]=t;
}
}
for(i=1;i<=stu;i++)
for(k=1;k<=stu;k++)
if(c[k]==i)
{
a[i][9]=k;
break;
}
for(i=1;i<=stu;i++) /*输出成绩表*/
{
for(j=1;j<=9;j++)
printf("%-6d",a[i][j]);
printf("\n");
}
/*以下输出成绩表存到一个文件中*/
fprintf(fp,"学号 语文 数学 英语 物理 化学 总分 均分 名次\n");
for(i=1;i<=stu;i++)
{
for(j=1;j<=9;j++)
fprintf(fp,"%-6d",a[i][j]);
fprintf(fp,"\n");
}
}
print2() /*求各科总分和平均分*/
{
int i,j;
int m[3][6];
for(j=2;j<=6;j++)
{
m[1][j-1]=0;
for(i=1;i<=stu;i++)
m[1][j-1]=m[1][j-1]+a[i][j];
m[2][j-1]=m[1][j-1]/stu;
}
for(i=1;i<=2;i++)
{
for(j=1;j<=5;j++)
printf("%-6d",m[i][j]);
printf("\n");
}
}
change() /*修改学生成绩*/
{
int m,b,c,i,n=0;
printf("请输入您要修改的学生的学号:");
scanf("%d",&m);
printf("1,语文;2,数学;3,英语;4,物理;5,化学;\n");
printf("请选择您要修改的科目:");
scanf("%d",&b);
printf("请输入新的学生成绩:");
scanf("%d",&c);
for(i=1;i<=stu;i++)
if(m!=a[i][1]) n++;
else {
n++;
break;
}
a[n][b+1]=c;
printf("\n重新输出成绩表\n");
printf("学号 语文 数学 英语 物理 化学 总分 均分 名次\n");
print1();
go();
}
go() /*选择菜单*/
{
int n;
printf("\n现在您将会遇到以下几种情况:\n");
printf("1,继续查询;2,修改数据;3,重新运行;4,结束程序;\n");
printf("请您根据需要按键选择:");
scanf("%d",&n);
if(n==1)find();
if(n==2)change();
if(n==3)main();
if(n==4){
clrscr();
printf("*********感谢您使用本程序*********\n");
printf("请多多指教");
printf("\n\n");
printf("再次感谢您的使用\n");
printf("------------ByeBye----------------");
}
getch();
}
find1() /*按名次查询学生成绩*/
{
int n,i;
printf("请输入您要查询的学生的名次:");
scanf("%d",&n);
printf("名次 学号 语文 数学 英语 物理 化学 总分 均分\n");
for(i=1;i<=stu;i++)
if(n==a[i][9])
{ printf("%-6d%-6d%-6d%-6d%-6d%-6d%-6d%-6d%-6d",a[i][9],a[i][1],a[i][2],a[i][3],a[i][4],a[i][5],a[i][6],a[i][7],a[i][8]);
break;
}
printf("\n");
go();
}
find2() /*按学号查询学生成绩*/
{
int n,i;
printf("请输入您要查询的学生的学号:");
scanf("%d",&n);
printf("学号 语文 数学 英语 物理 化学 总分 均分 名次\n");
for(i=1;i<=stu;i++)
if(n==a[i][1])
{ printf("%-6d%-6d%-6d%-6d%-6d%-6d%-6d%-6d%-6d",a[i][1],a[i][2],a[i][3],a[i][4],a[i][5],a[i][6],a[i][7],a[i][8],a[i][9]);
break;
}
printf("\n");
go();
}
find3_1(int n) /*输出科目查询结果*/
{
int i;
printf("学号 名次 语文 数学 英语 物理 化学 总分 均分\n");
for(i=1;i<=stu;i++)
if(a[i][n+1]>=90)
{ printf("%-6d%-6d%-6d%-6d%-6d%-6d%-6d%-6d%-6d",a[i][1],a[i][9],a[i][2],a[i][3],a[i][4],a[i][5],a[i][6],a[i][7],a[i][8]);
printf("\n");
}
go();
}
find3() /*科目选择菜单*/
{
int n;
printf("现有以下五种科目供查询:\n");
printf("1,语文;2,数学;3,英语;4,物理;5,化学;\n");
printf("请按键选择:");
scanf("%d",&n);
find3_1(n);
}
find() /*查询方式菜单*/
{
int m;
printf("根据您的要求,有以下3种查询方式: \n");
printf("1,按名次查询;\n");
printf("2,按学号查询;\n");
printf("3,查询某科成绩在90分以上的学生的情况;\n");
printf("现在,按照您的需要请按键:");
scanf("%d",&m);
if(m==1)find1();
if(m==2)find2();
if(m==3)find3();
}
main() /*主函数运用文本编辑对欢迎界面进行排版*/
{
int i;
clrscr(); /*清屏*/
textcolor(YELLOW);
{
gotoxy(20,9);
printf("******欢迎使用学生成绩管理系统!******\n");
gotoxy(20,11);
printf("------------制作人:刘丹------------\n");
gotoxy(20,13);
printf("******欢迎阅读******\n");
gotoxy(20,15);
printf("***********网络10307班***********\n");
}
for(i=1;i<=44;i++) /*输出用#组成的矩形以达到美观的效果*/
{
{
gotoxy(16+i,19);
printf("#");
}
{
gotoxy(16+i,7);
printf("#");
}
}
for(i=1;i<=13;i++)
{
{
gotoxy(16,6+i);
printf("#");
}
{
gotoxy(61,6+i);
printf("#");
}
}
getch();
clrscr();
inputx();
clrscr();
gotoxy(3,3);
printf("\n学生成绩管理系统\n\n");
printf("一,输入成绩\n");
printf("请输入学生的成绩:\n" );
printf("学号 语文 数学 英语 物理 化学\n");
input();
printf("\n");
printf("二,输出成绩表\n");
printf("学号 语文 数学 英语 物理 化学 总分 均分 名次\n");
print1();
printf("\n");
printf("三,输出各科总分及平均分\n");
printf("语文 数学 英语 物理 化学\n");
print2();
printf("\n");
printf("四,查询\n");
find();
}
六、运行结果如下:
⑴开始运行所看到的界面:
⑵输入学生人数:
⑶显示成绩情况:
⑷退出程序:
⑸退出结果:
课程设计项目二
一、 课程设计名称:幻方图案(要求有边框)
二、 课程设计目的:1.复习巩固C语言学过的知识
2.学习利用计算机编程来解决数学问题
三、课程设计要求:1.以文本菜单界面选择幻方图案
四、课程设计内容:输入一个大于N>=3的基数,输出一个N阶幻方。
五、程序代码:
#define N 12
main()
{int i,j,k=1,n=1,a[N][N];
while(n!=0)
{printf("please input a number:");
scanf("%d",&n);
if(n==0)break;
else
{i=n/2+1;
j=n;
a[i][j]=k++;
while(k<=n*n)
{if(k%n==1)j--;
else
{i=i%n+1;
j=j%n+1;}
a[i][j]=k++;}
printf(" ");
for(i=1;i<=3*n+1;i++)
printf("* ");
printf("\n *");
for(i=1;i<=n;i++)
{for(j=1;j<=n;j++)
printf(" %-3d*",a[i][j]);
printf("\n");printf(" ");
for(j=1;j<3*n+1;j++)
printf("* ");
printf("*");
if(i==n)printf("\n");
else {printf("\n ");
printf("*");}
}
printf("\n");}
k=1;}
}
六、运行结果如下:
七、实训心得:
1.本学生成绩管理系统在应用函数与数组的基础上进行设计的,与我们所学的C语言的知识相当吻合。
对于这一程序的实现,让我对C语言的知识有了很好的巩固,也意识到函数与数组的重要性。不过学过的知识只有不断的巩固,才能掌握。
2.奇数阶的幻方的算法用C语言来实现,其特点是边框可以根据阶数的变化而变化。其中应用了宏代换的技巧。对于这一程序的实现,体现C语言的魅力。
第二篇:C语言实训报告(WORD版)
桂林电子科技大学信息科技学院
《C语言程序设计》课程设计
实验报告
题目:房产信息管理系统设计
专业: 班 级: 学号: 姓名:
完成日期: 2010 年 09 月 18 日
指导教师:
程序题目: 房产信息管理系统设计
房产管理信息包括:房产证编号、房屋所有人名称、房屋大小(平米)、房产期限(50年,70年。。。。。。)、所属区域(七星区,象山区。。。。)等
功能描述
1、新房产基本信息的输入。
2、房产基本信息的查询。(按名称,按所属区域等)
3、对房产基本信息的删除。
要求:使用二进制文件方式存储数据,系统以菜单方式工作
数据结构设计及用法说明:
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
? #include<stdio.h> #include<stdlib.h> #include<string.h> #include"conio.h" #define N 50 /*定义符号常量,代表房产信息的最大值*/ int count=0; /*全局变量,用于记录数组的当前位置*/ struct building /*定义结构体类型,代表学生信息*/ { char name[20]; /*房主姓名 */ char ID[50]; /*房产证号*/ float square; /*房屋大小*/ float limit; /*房产期限*/ char area[100]; /*房屋所属区域*/ }; void input(struct building *arr); /*函数声明,输入房产信息*/ void find(struct building *arr); /*函数声明,查找房产信息*/ void del(struct building *arr); /*函数声明,删除房产信息*/ void main() { int choice; /*定义局部变量,用于记录用户选择的功能编号*/ struct building buil[N]; /*定义结构体数组,用于记录房产信息*/ do /*利用循环显示界面*/ { system("cls"); /*清屏函数*/ printf("**********************************房产信息********************************\n"); printf(" | [1] 房产信息输入 |\n"); printf(" | [2] 房产信息查询 |\n"); printf(" | [3] 房产信息删除 |\n"); printf(" | [4] 退 出 |\n");
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? printf("请输入一个(1~4)字母"); fflush(stdin); /*清空输入缓冲区*/ scanf("%d",&choice); /*接受用户选择的功能编号*/ switch(choice) /*输入不同功能编号调用相应函数来完成功能*/ { case 1: input(buil); /*调用输入房产信息函数,参数为房产信息数组名*/ break; case 2: find(buil); /*调用按房主名字和房产证号查找房产信息函数*/ break; case 3: del(buil); /*调用删除已输入的房产信息函数*/ break; } }while(choice!=4); /*判断是否退出*/ printf("\n\n\t\t\t-----------谢谢使用------------\n\n"); /*输出告别词*/ } void input(struct building *arr) /*定义输入房产信息函数*/ { char xx; /*用于接收用户指令*/ Do /*利用循环,由用户控制输入房产信息*/ { system("cls"); printf("\n输入第%d个房产的信息:\n输入房产证编号:",count+1); scanf("%s",arr[count].ID); printf("\n输入房屋所有人姓名:"); scanf("%s",arr[count].name); printf("\n输入房屋大小:"); scanf("%f",&arr[count].square); printf("\n输入房产期限:"); scanf("%f",&arr[count].limit); printf("\n输入房屋所属区域:"); scanf("%s",arr[count].area); count++; /*记录当前输入的房产信息的个数*/ printf("\n是否继续输入信息(y/n)\n"); fflush(stdin); /*清空输入缓冲区*/ xx=getchar(); }while(xx=='y'||xx=='Y'); /*判断用户指令,是否继续输入*/
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
? } void find(struct building *arr) /*定义查找房产信息的函数*/ { int a; char name[20]; /*用于接收用户输入的房主姓名*/ char ID[50]; /*用于接收用户输入的房产证号*/ system("cls"); /*清屏函数*/ printf("\n请输入要查找房产信息:\n"); printf("\n房主姓名:\n"); scanf("%s",name); printf("\n房产证编号:\n"); scanf("%s",ID); for(a=0;a<count;a++) /*使用字符串比较函数查找兵书出符合条件的房产信息*/ { if((strcmp(name,arr[a].name)==0)&&(strcmp(ID,arr[a].ID)==0)) { printf("\n户主姓名\t房产证编号\t房屋大小\t房产期限\t所属区域\t\n");
printf("%-9s\t%-9s\t%-9.2f\t%-9.1f\t%-s\n",arr[a].name,arr[a].ID,arr[a].square,arr[a].limit,arr[a].area,a+1);
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
? break; } } if(a>=count) /*如果没找到,会从循环条件退出*/ printf("\n未找到该房产信息,请核对后重新查找!\n"); fflush(stdin); printf("\n回车键返回上一功能菜单\n"); /*清空输入缓冲区*/ getchar(); } void del(struct building *arr) /*定义删除函数*/ { char id[50]; /*用于接收用户输入的房产证号*/ char c; int flag=-1; printf("请输入要删除的房产证编号:"); scanf("%s",id); for(int i=0;i<count;i++) { if(strcmp(id,arr[i].ID)==0){flag=1;break;} } if(flag==1) { printf("\n\t户主姓名\t房产证编号\t房屋大小\t房产期限\t所属区域\t\n");
?
printf("\t%-6s\t%-4s\t%-6.1f\t%-6.1f\t%-6.1f\n",arr[i].name,arr[i].ID,arr[i].square,arr[i].limit,arr[i].area,i+1);
printf("请确认是否是次号,请确认是否删除Y|N");
c=getch();
if(c=='y'||c=='Y')
{
for(int j=i;j<count-1;j++)
arr[j]=arr[j+1];
printf("\n删除成功!");
count--;
}
}
else printf("\n没有此号,请查询后再输!");
printf("\n按任意键继续!");
getch();
} ? ? ? ? ? ? ? ? ? ? ? ? ? ?