学生成绩管理系统运行不出来,求指点

eivirgo 2017-01-01 07:58:39

题目要求:
设计一个程序实现对学生成绩的管理,要求可以对指定的文件进行操作,可将多个文件组成一个文件。程序设计功能及要求:
1、输入:学生的基本信息,包括学号、姓名、C语言成绩、高等数学成绩等。
原始数据文件格式 (具体数据和项目自行编写):
学号  姓名  英语  C语言  高等数学………… 
1  张三 76  89  78 
2  李四 … …   …
2、查询:可以按学号、姓名等进行成绩查询。
3、删除:删除某条记录。
4、计算:计算每个学生的总成绩、平均成绩,所有学生单科的平均成绩,将总成绩、平均成绩、名次加到对应学生成绩记录。
5、统计:统计每科成绩分布情况,统计情况存到文件中。
输出数据文件(由程序自动生成)
学号 姓名 英语 C语言 高等数学 ………平均成绩 名次
1 张三 76  89  78  …………
2 李四 ….  …. …. 
  统计情况:

  分数段 英语 C语言  高等数学 ………………….
  <60  2  … 
  60~69  8  … 
  70~79  5  … 
  80~89  10  …
平均分 78 …
二、实验方法
1)学生信息的录入
从键盘录入学生的基本信息,并将其保存至学生成绩文件。
2)学生信息查询
从键盘输入姓名或学号,在学生成绩文件中实现按学号、姓名的查找,如果存在,则输出该学生的其他信息,如不存在,输出不存在此学生。
3)学生信息的删除
从键盘输入要删除的学生学号或姓名,在学生成绩文件中删除该学生的基本信息。
4)成绩的计算
计算每个学生的总成绩、平均成绩,所有学生单科的平均成绩,将总成绩、平均成绩、名次加到对应学生成绩记录中;
5)统计
统计每科成绩分布情况,统计情况加到学生成绩文件最后。
界面的设计
采用菜单或字符界面的形式,方便功能的选择。



这个是远行不出来的:
#include<stdio.h>
#include<conio.h>
typedef struct{
long INum; /*学号*/
char Name; /*姓名*/
char Sex; /*性别*/
int iScore[6]; /*存放三门成绩及总成绩,平均成绩,名次*/
}STUDENTINF;
#define NUM 3 /*人数定义*/
/*函数原型声明*/
int UserScreen(void);
void Bell(void);
void ReadData(STUDENTINF*);
void ScoreSort(STUDENTINF*,int);
int FunctionSelection(void);
void ScoreStatistic(STUDENTINF*,int*,int);
void PrintMessage(STUDENTINF*,int);
/*main.c*/

int main(int argc,char *argv[])
{
STUDENTINF stud[NUM]; /*定义结构数组*/
FILE *fp;
int i,j,iIndex,iSubIndex,iScoreCode;
long INumSearch;
char buffTmp[10];
int iScoreSeg[5]={0};
int iaver[3]={0};
do{
iIndex=UserScreen(); /*调用用户界面*/
system("cls");
//clrscr(); /*清屏*/
switch(iIndex)
{
case 1:printf("开始录入:\n"); /*输入学生信息*/
/*打开文件*/
fp=fopen("Data.txt","w");
for(i=0;i<NUM;i++)
ReadData(stud+i); /*循环输入数据*/
ScoreSort(stud,NUM);
fwrite(stud,sizeof(STUDENTINF),NUM,fp);
for(j=0;j<3;j++)
{
for(i=0;i<NUM;i++) /*计算各科所有学生的平均成绩*/
iaver[j]+=stud[i].iScore[j];
}
for(j=0;j<3;j++)
iaver[j]=iaver[j]/NUM;
fwrite(iaver,sizeof(iaver),3,fp);
fclose(fp);
for(i=0;i<NUM;i++)
PrintMessage(stud,i);
getchar();
break;
case 2:printf("请输入查询的姓名或学号:"); /*按姓名或学号查询成绩*/
fp=fopen("Data.txt","r+");
gets(buffTmp);
INumSearch=atol(buffTmp);
for(i=0;i<NUM;i++)
if(INumSearch==stud[i].INum||buffTmp==stud[i].Name)
break;
if(i<=NUM)
PrintMessage(stud,i);
else printf("查询无结果");
fclose(fp);
getchar();
break;
case 3:printf("请选择需要的操作:");
iSubIndex=FunctionSelection();
fp=fopen("Data.txt","r+");
fread(stud,sizeof(STUDENTINF),NUM,fp);
switch(iSubIndex)
{
case 1: /*删除学生信息*/
printf("请输入要删除的学生信息的姓名或学号:");
gets(buffTmp);
INumSearch=atol(buffTmp);
for(i=0;i<NUM;i++)
if(INumSearch==stud[i].INum||buffTmp==stud[i].Name)
break;
if(i<NUM) j=i;
for(j=i;j<NUM;j++)
stud[j]=stu[j+1];
NUM=NUM-1;
printf("删除成功");
else printf("查询无结果");
break;
case 2: /*统计各科各个分数段的人数*/
printf("各科分数段分布:\n");
for(i=0;i<3;i++)
{ ScoreStatistic(stud,iScoreSeg,i);

printf("第%d门课的成绩各分数段的人数:\n",i+1);
printf("90分以上人数: \t%-5\n",iScoreSeg[0]);
ptintf("80分到89分人数:\t%-5\n",iScoreSeg[1]);
ptintf("70分到79分人数:\t%-5\n",iScoreSeg[2]);
ptintf("60分到69分人数:\t%-5\n",iScoreSeg[3]);
ptintf("不及格人数:\t%-5\n",iScoreSeg[4]);
}

break;
}
getchar();
fclose(fp);
break;
case 4:return 0; /*退出系统*/
}
}while(iIndex!=4); /*循环显示主界面用户*/
}


/*------------------------------------
/ 函数名:UserScreen
/ 作用:用户主选择界面
/ 参数:无
/ 返回值:用户选择数据,整型,范围1~4
/-------------------------------------*/

int UserScreen(void)
{
char ch[3];
// clrscr();
do{
system("cls");
printf("1:输入全体数据\n");
printf("2:查询成绩\n");
printf("3:数据处理\n");
printf("4:退出系统\n");
printf("Please Selection:");
gets(ch);
if(ch[0]>'4'||ch[0]<'1')
Bell();
else
return ch[0]-'0';
}while(ch[0]>'4'||ch[0]<'1');
}

/*------------------------------------
/ 函数名:Bell
/ 作用:输入错误提示
/ 参数:无
/ 返回值:无
/-------------------------------------*/
void Bell(void)
{
printf("\007");
}

/*------------------------------------
/ 函数名:ReadData
/ 作用:输入一个学生信息
/ 参数:指向STUDENTINF的指针
/ 返回值:无
/------------------------------------*/
void ReadData(STUDENTINF *p)
{
char strTmp[15];
int i,sum=0;
printf("请输入学号:");
gets(strTmp);
p->INum =atol(strTmp);
printf("请输入姓名:");
gets(p->Name);
printf("请输入性别,m(男)/f(女):");
do{
gets(strTmp);
p->Sex =strTmp[0];
if(strTmp[0]!='f'&&strTmp!='m')
Bell();
}while(strTmp[0]!='f'&&strTmp!='m');
for(i=0;i<3;i++)
{printf("请输入第%d门课的成绩:",i+1);
gets(strTmp);
p->iScore[i]=atoi(strTmp);
sum+=p->iScore[i];
}
p->iScore[3]=sum;
p->iScore [4]=sum/4;
}

/*------------------------------------
/ 函数名:ScoreSort
/ 作用:对总成绩排序得出名次
/ 参数:pStu,指向STUDENTINF的指针,传递成绩结构的首地址
iSelCore,整型,传递所选课程
/ 返回值:无
/------------------------------------*/
void ScoreSort(STUDENTINF *pStu,int iSelScore)
{int i,j;
STUDENTINF Temp;
for(i=0;i<NUM-1;i++)
for(j=i+1;j<NUM;j++)
{
if((pStu+i)->iScore[iSelScore]<(pStu+i)->iScore[iSelScore])
{
Temp=*(pStu+i);
*(pStu+i)=*(pStu+j);
*(pStu+j)=Temp;
}
}
for(i=0;i<NUM;i++)
stu[j+1].iScore[5]=i+1;
}

/*------------------------------------
/ 函数名: FunctionSelection
/ 作用:事务处理功能选择
/ 参数:无
/ 返回值:用户选择数据,整型,范围1~2
/------------------------------------*/
int FunctionSelection(void)
{
char ch[3];
// clrscr();
do{
system("cls");
printf("1:删除学生信息\n");
printf("2:统计各科各个分数段的人数\n");
printf("Please Selection:");
gets(ch);
if(ch[0]>'2'||ch[0]<'1')
Bell();
else
return ch[0]-'0';
}while(ch[0]>'2'||ch[0]<'1');
}

/*------------------------------------
/ 函数名:ScoreStstistic
/ 作用:统计各科各分数段的人数
/ 参数:pStu,指向STUDENTINF的指针,传递成绩结构的首地址
pScore,指向整型的指针传递各个分数组的首地址
iSelCore,整型,传递统计的课程
/ 返回值:无
/------------------------------------*/
void ScoreStatistic(STUDENTINF *pStu,int *pScore,int iSelScore)
{
int i;
for(i=0;i<NUM;i++)
pScore[i]=0;
for(i=0;i<NUM;i++)
if((pStu+i)->iScore[iSelScore]>=90)
pScore[0]++;
else if((pStu+i)->iScore[iSelScore]>=80)
pScore[1]++;
else if((pStu+i)->iScore[iSelScore]>=70)
pScore[2]++;
else if((pStu+i)->iScore[iSelScore]>=60)
pScore[3]++;
else
pScore[4]++;
}

/*------------------------------------
/ 函数名:PrintMessage
/ 作用:输出选定学生的信息
/ 参数:pStu,指向STUDENTINF的指针,传递成绩结构的首地址
iSel,整型,选定的学生在结构数组中的位置
/ 返回值:无
/------------------------------------*/
void PrintMessage(STUDENTINF *pStu,int iSel)
{
printf("学号:%-8d 姓名:%-8s 性别:%-2c 三门课程的成绩:%-4d,%-4d,%-4d 总成绩:%-4d 平均成绩:%-4d 名次:%-2d,
(pStu+iSel)->INum,(pStu+iSel)->Name,(pStu+iSel)->Sex,(pStu+iSel)->iScore[0],(pStu+iSel)->iScore[1],
(pStu+iSel)->iScore[2],(pStu+iSel)->iScore[3],(pStu+iSel)->iScore[4],(pStu+iSel)->iScore[5]);
}



...全文
747 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-02-21
  • 打赏
  • 举报
回复
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒:再牛×的老师也无法代替学生自己领悟和上厕所! 单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。
a149979032 2017-02-21
  • 打赏
  • 举报
回复
我这个也运行不起来,求看一下,没分了
#include<stdio.h>
#define N 13
struct person
{
	int number;
	int nextp;
}link[N+1];

int main()
{
	int i, count, h;
	for (i = 1; i < N; i++)
	{
		if (i == N)
			link[i].nextp = 1;
		else
		{
			link[i].nextp = i + 1;
			link[i].number = i;
		}
	}
	printf("\n");
	h = N;
	count = 0;
	printf("sequence that person leave the circle:\n");
	while (count < N - 1)
	{
		i = 0;
		while (i != 3)
		{
			h = link[h].nextp;
			if (link[h].number)
				i++;
		}
		printf("%4d", link[h].number);
		link[h].number = 0;
		count++;
	}
	printf("\nthe last one is:\n");
	for (i = 1; i < N; i++)
		if (link[i].number)
			printf("%3d\n", link[i].number);
	return 0;
}
呼儿呀嘿 2017-02-15
  • 打赏
  • 举报
回复
这个我改了下,不过还是有点问题,不知道你着急用不
kakabulusi 2017-01-06
  • 打赏
  • 举报
回复
网上下载的东西果然不可靠,还是加入一点自己的思想自己写吧,最多写的丑了点,但是能力的提升远比你下载100份精华代码有效得多。
小灸舞 2017-01-04
  • 打赏
  • 举报
回复
不知道你哪里拷贝过来的代码,很多错误,比如:
1.NUM是宏定义,你代码中还NUM = NUM - 1;
2.stu没定义过,就直接拿来用?
3.ptintf拼写错误
4.buffTmp == stud[i].Name这个又是什么??(char数组和一个char字符比较?)
自己根据编译器的错误提示一个个改
qq_36725245 2017-01-02
  • 打赏
  • 举报
回复
是不是课程设计…我也在做这个,一模一样

33,322

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧