资源描述
课程实验报告
课程名称
C语言程序设计
班级
13新能源2班
实验日期
2013年8月1号
姓名
许鑫
学号
130370236
实验成绩
实验名称
学生成绩记录簿系统
实
验
题
目
描
述
本程序就是非数值计算型算法设计,我设计出了学生成绩记录簿系统得基本功能,并设计了简单得界面。本程序主要考察对自定义函数得熟悉程度,本程序主要使用得就是链表得相关操作,包括结构体链表得创建、输入、输出、查找、删除等。我设计得这个成绩记录簿系统也初步实现了学生成绩信息得显示、输入、删除、查找等必要得功能。
1、建立一个主界面
2、用switch语句进行分类讨论
3、分别进入录入,查询,删除,等子函数。
4、将子函数与主函数相连即可。
该程序可以建立学生得成绩记录。可以方便老师与同学方便得查阅成绩;
这个程序有录入与删除得功能;
还可以求出平均成绩,并排序
成绩记录簿中记录以下数据:学号、姓名、课程编号、课程名称、成绩、学分
添加成绩:需要输入学生得学号或姓名、课程编号及成绩,如已有该门课程成绩给出提示;
查询(班级或个人)成绩:
查询个人成绩:以学号或姓名作为关键字,可查询一个学生得所有成绩,与已完成得总学分。
查询班级成绩:以课程编号为关键字,成绩表后面要统计平均分、及格率及全班同学不同课程在不同分数段分布得人数及百分比。
拓展功能:
a) 程序启动时先从文件读入数据,如果文件中没有数据则给出提示;
b) 每次修改得数据写入文件
实
验
环
境
以自己得电脑为主要得实验平台,运用Visual C++ 6、0这个软件进行反复得编写实验。
实
验
界
面
截
图
1、开始时
2、添加
3、查询
4、查询成绩
5、写文本
6、读取
算
法
描
述
及
实
验
步
骤
主程序提供一个界面,允许用户选择。使用switch语句,用时直接输入数字即可。
增加函数,功能就是插入学生成绩。使用一个无穷循环,直到录入”n”时结束。
删除函数,功能就是删除,分为两步,先找后删。找,用strcmp函数 来做如果找到记录i值,反之记为-1;删除可以从i项开始将数组得后一项赋值给前一项。前一项自动被删掉。这样完成删除。
查询函数与之类似,将删除改为输出即可;
求平均值函数与查询类似只就是输出时只输出平均值而已。
按平均值排序只要加一个排序函数即可。
退出函数什么都不写,即可。
程序流程图
查询成绩
添加成绩
添加学生成绩
添加课程编号
添加学生姓名
添加学生学号
查询班级成绩
查询学生成绩
查询班级成绩
查询学生成绩
课程编号
学号查询
姓名查询
调
试
过
程
及
实
验
结
果
总
结
经过一个多星期得编译原理课程设计,在我得努力下,顺利完成该课程设计。
通过该课程设计,掌握了编译程序工作得基本过程及其各阶段得基本任务,熟悉了编译程序总流程框图,了解了编译程序得生成过程及其相关得技术,对课本上得知识也有了更深得理解。老师常说,课本上得知识就是机械得,表面得,要学会去运用,要举一反三。现在终于深刻得了解了这句话。经过这次得课程设计,发现书本上很深奥得知识变得更为简单,同样,对实验原理也了有更深得理解。知道与理解了该理论在计算机中就是怎样执行得, 对该理论在实践中得应用有深刻得理解 。通过该课程设计,把死板得课本知识变得生动有趣,激发了学习得积极性。能够把课堂上学得知识通过自己设计得程序表示出来,加深了对理论知识得理解。
课程设计中程序比较复杂,在调试时应该仔细,在程序调试时,注意指针,将不必要得命令去除。除了课堂外,课程设计就是最能学到东西得,最考验人得。在做课程设计得这段时间,时刻都感到自己学得知识有多么得贫瘠。经过这次课程设计,让我对C++这门语言有了更深得认识,操作能力有了提高要想就是写出得代码能运行,需要耐心细心,毅力以及充沛得体力。只有经过多次编辑,多次编译,再多次运行,才能编写出更好得程序,有时候需要多次得更正才能达到所要得运行结果。
附
录
#include <stdio、h>
#include <stdlib、h>
#include <string、h>
#define MAX 1000
struct Lesson
{
char LessonName[100];
char LessonNumber[100];
int LessonMark;
float LessonCredit;
};
struct Student
{
char Name[100];
char Number[100];
int LessonCount;
struct Lesson L[100];
};
struct Student S[MAX];
int StudentCount = 0;
void PrintInterface();
int Student_Insert();
int Student_Delete();
void Student_Select();
void Class_Select();
void WriteFile();
void ReadFile();
int main()
{
int n;
{
PrintInterface();
scanf("%d", &n);
}
}
void PrintInterface()
{
int n;
while (1)
{
printf("\n ---欢迎使用学生成绩记录簿系统--- ");
printf("\n| 1、添加 |\n");
printf("\n| 2、删除 |\n");
printf("\n| 3、查学生成绩 |\n");
printf("\n| 4、查班成绩表 |\n");
printf("\n| 5、写入文本文件 |\n");
printf("\n| 6、读取文本文件 |\n");
printf("\n| 0、退出 |\n");
printf("\n -------------------------- ");
printf("\n选择操作:");
scanf("%d",&n);
switch(n){
case 1:
ﻩ if (Student_Insert())
ﻩ ﻩ printf("\n添加成功、、、回车继续\n");
else
ﻩﻩ printf("\n添加失败、、、回车继续\n");
break;
ﻩ case 2:
Student_Delete();
break;
ﻩﻩ case 3:
Student_Select();
break;
case 4:
Class_Select();
ﻩ break;
ﻩ
ﻩﻩ case 5:
WriteFile();
ﻩ break;
case 6:
ﻩ ReadFile();
ﻩ ﻩ break;
case 0:
exit(1);
break;
ﻩ default:
ﻩﻩ printf("无此功能,请重新选择,按回车确定\n");
}
}
return 0;
}
int Student_Insert()
{
int i,j,n;
printf("\n请输入所添加得学生人数:");
scanf("%d", &n);
if (StudentCount + n >= MAX)
return 0;
for (i = StudentCount; i < StudentCount + n; ++i)
{
printf("\n\t第%d个学生:\n", i - StudentCount + 1);
printf("\n\t学生学号:");
ﻩscanf("%s", &S[i]、Number);
if(strlen(S[i]、Number)!=8)
ﻩﻩ{
ﻩﻩ printf("输入错误,请重新输入");
ﻩ return 0;
ﻩ }
ﻩ
printf("\n\t学生姓名:");
ﻩscanf("%s", S[i]、Name);
ﻩ
printf("\n\t该学生所修课程数:");
ﻩ scanf("%d", &S[i]、LessonCount);
for (j = 0; j < S[i]、LessonCount; ++j)
{
printf("\n\t第%d门课:\n", j + 1);
printf("\n\t\t课程编号:");
scanf("%s", S[i]、L[j]、LessonNumber);
ﻩﻩﻩif(strlen(S[i]、L[j]、LessonNumber)!=5)
ﻩﻩ{
ﻩ printf("输入错误,请重新输入!");
ﻩ return 0;
}
printf("\n\t\t课程名称:");
ﻩscanf("%s",S[i]、L[j]、LessonName);
ﻩﻩ
printf("\n\t\t课程成绩:");
ﻩ scanf("%d", &S[i]、L[j]、LessonMark);
if(S[i]、L[j]、LessonMark<0 || S[i]、L[j]、LessonMark>100)
ﻩ{
ﻩ printf("输入错误,请重新输入!");
ﻩ return 0;
}
printf("\n\t\t课程学分:");
ﻩﻩ scanf("%f", &S[i]、L[j]、LessonCredit);
ﻩ if(S[i]、L[j]、LessonCredit<1 || S[i]、L[j]、LessonCredit>5)
ﻩﻩ {
printf("输入错误,请重新输入!");
ﻩ return 0;
}
ﻩﻩ
if (S[i]、L[j]、LessonMark < 60)
ﻩ S[i]、L[j]、LessonCredit = 0;
}
}
StudentCount += n ;
return 1;
}
int Student_Delete()
{
char a[100];
ﻩchar b[100];
int i, j;
printf("\n删除学生:\n");
printf("\n学生姓名:");
scanf("%s",a);
printf("\n学生学号:");
scanf("%s",b);
if(strlen(b)!=8)
ﻩ ﻩ{
ﻩprintf("输入错误请重新输入");
ﻩreturn 0;
}
for (i = 0; i < StudentCount; i++)
{
if (0==strcmp(S[i]、Name, a) && 0==strcmp(S[i]、Number, b))
{
printf("\n找到,删除\n");
for (j = i + 1; j < StudentCount; j++)
{
S[j - 1] = S[j];
}
break;
}
}
if (i == StudentCount || i > StudentCount)
{
printf("\n未找到该学生\n\n");
return 0;
}
else
{
StudentCount--;
return 1;
}
}
void Student_Select()
{
int x;
char y[100];
char a[100];
int i, j;
printf("\n输入所查学生信息(1、姓名 2、学号)选择:");
scanf("%d", &x);
if (x == 1 || x == 2)
{
if (x == 1)
{
printf("\n姓名:");
ﻩ fflush(stdin);
gets(a);
for (i = 0; i < StudentCount; i++)
{
if (0==strcmp(S[i]、Name,a))
{
printf("\n学号:%s\t姓名:%s\n", S[i]、Number, S[i]、Name);
printf("\n课程编号\t课程名称\t课程成绩\t课程学分\n");
printf("-----------------------------------------------------\n");
for (j = 0; j < S[i]、LessonCount; j++)
{
printf("%s\t\t%s\t\t%d\t\t%f\n", S[i]、L[j]、LessonNumber,
S[i]、L[j]、LessonName, S[i]、L[j]、LessonMark,
S[i]、L[j]、LessonCredit);
printf("-----------------------------------------------------\n");
}
printf("\n\n");
}
}
}
else
{
printf("\n学号:");
fflush(stdin);
gets(y);
for (i = 0; i < StudentCount; i++)
{
if (strcmp(S[i]、Number,y)==0)
{
printf("\n学号:%s\t姓名:%s\n", S[i]、Number, S[i]、Name);
printf("\n课程编号\t课程名称\t课程成绩\t课程学分\n");
printf("-----------------------------------------------------\n");
for (j = 0; j < S[i]、LessonCount; j++)
{
printf("%s\t\t%s\t\t%d\t\t%f\n",
ﻩ S[i]、L[j]、LessonNumber,S[i]、L[j]、LessonName,
ﻩ ﻩ S[i]、L[j]、LessonMark,S[i]、L[j]、LessonCredit);
printf("-----------------------------------------------------\n");
}
printf("\n\n");
break;
}
}
}
printf("查找完毕、、、回车继续\n");
getchar();
}
else
{
printf("选择错误、、、回车继续\n");
getchar();
return;
}
}
void Class_Select()
{
char a[100];
double x=0,y=0,z=0;
int i, j;
printf("\n请输入课程编号:");
fflush(stdin);
scanf("%s",a);
printf("学号\t姓名\t课程名称\t课程成绩\t课程学分\n");
printf("----------------------------------------------------\n");
for (i = 0; i < StudentCount; i++)
{
for (j = 0; j < S[i]、LessonCount; j++)
{
if (strcmp(S[i]、L[j]、LessonNumber,a)==0)
{
printf("%s\t%s\t%s\t\t%d\t\t%f\n",
ﻩ ﻩ S[i]、Number, S[i]、Name, S[i]、L[j]、LessonName,
S[i]、L[j]、LessonMark, S[i]、L[j]、LessonCredit);
printf("----------------------------------------------------\n");
z+=S[i]、L[j]、LessonMark;
x++;
if (S[i]、L[j]、LessonMark >= 60)
ﻩﻩﻩﻩy++;
break;
}
}
}
printf("\n平均分:%f\t及格率:%f%%\n\n", z/x, y/x*100);
printf("\n查找完毕、、、回车继续\n");
getchar();
}
void WriteFile()
{
FILE *fp;
int i, j;
char a[100];
printf("\n请输入写入得文件地址:\n\n地址输入格式:例如d:\\\\Student、txt:");
scanf("%s",&a);
printf("\n写入中、、、、、、\n");
if (fp = fopen(a,"w"))
{
fprintf(fp,"%d\n",StudentCount);
for (i = 0; i < StudentCount; i++)
{
fprintf(fp,"%s\t%s\t%d\n",S[i]、Number, S[i]、Name,S[i]、LessonCount);
for (j = 0; j < S[i]、LessonCount; j++)
{
fprintf(fp,"%s\t%s\t%d\t%f\n", S[i]、L[j]、LessonNumber,S[i]、L[j]、LessonName,
ﻩ S[i]、L[j]、LessonMark,S[i]、L[j]、LessonCredit);
}
}
printf("\n写入完成、、、回车继续\n");
fclose(fp);
}
else
{
printf("\n写入失败、、、回车继续\n");
}
getchar();
}
void ReadFile()
{
FILE *fp;
int i, j;
char a[100];
printf("\n请输入读取得文件地址:\n\n地址输入格式:例如d:\\\\student、txt:");
scanf("%s",&a);
printf("\n读取中、、、、、、\n");
if (fp = fopen(a,"r"))
{
fscanf(fp,"%d",&StudentCount);
for (i = 0; i < StudentCount; i++)
{
fscanf(fp,"%s%s%d",&S[i]、Number, &S[i]、Name,&S[i]、LessonCount);
for (j = 0; j < S[i]、LessonCount; j++)
{
fscanf(fp,"%s%s%d%f",&S[i]、L[j]、LessonNumber,
&S[i]、L[j]、LessonName,&S[i]、L[j]、LessonMark,
&S[i]、L[j]、LessonCredit);
}
}
printf("\n读取成功、、、回车继续\n");
fclose(fp);
}
else
{
printf("\n读取失败、、、回车继续\n");
}
getchar();
}
展开阅读全文