来个大神指点一下小白吧

xunuoww 2014-07-04 07:16:18
第一次写程序,写得乱七八糟的,请指点一下。以下代码。想加入求十次成绩平均数,可以说明一下如何写吗?新人分不多请见谅。

/*2014年7月1日
学生成绩管理系统*/


# include <stdio.h>
# include <stdlib.h>
# include <string.h>
# include <windows.h>

struct student
{
char num[20];
char name[20];
char cla[20];
char cj1[30];
char cj2[30];
char cj3[30];
char cj4[30];
char cj5[30];
char cj6[30];
char cj7[30];
char cj8[30];
char cj9[30];
char cj10[30];
char grade[20];
char average[20];
struct student * next;
} * head, * p1, * p2;

void gotoxy(int x, int y)//移动光标位置;
{
HANDLE hout;
COORD coord;
coord.X = x;
coord.Y = y;
hout = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hout, coord);
}

void auther( void )//课程名称界面
{
gotoxy(20, 10);
printf("学生成绩管理系统\n 徐诺", 1, 1);
gotoxy(0, 23);
system("PAUSE");
system("CLS");
gotoxy(0, 0);
}

int mainmenu( void )//主菜单
{
int n=0;
while (1)
{
puts("\t /********************************************\\");
puts("\t # 1.输入学生成绩 #");
puts("\t # 2.读入学生成绩 #");
puts("\t # 3.查询学生成绩 #");
puts("\t # 4.删除学生成绩 #");
puts("\t # 5.修改学生成绩 #");
puts("\t # 0.退出系统 #");
puts("\t \\********************************************/");
printf("\t\n请选择:");
scanf("%d", &n );

if (n>5 || n<0)
{
puts("\n输入不合法! 请重新输入!\n");
system("PAUSE");
system("CLS");
}
else
{
break;
}
}
system("CLS");
return n;
}

void input( void ) // 输入学生成绩;
{
p1 = (struct student *)malloc(sizeof(struct student));
head = p1;
while (1)
{
puts("请输入学生成绩(学号为0时结束输入):");

printf("学号:");
scanf("%s", p1->num );
if (0 == strcmp("0", p1->num ))
{
break;
}
printf("姓名:");
scanf("%s", p1->name );
printf("班级:");
scanf("%s", p1->cla );
printf("第一次: ");
scanf("%s", p1->cj1 );
printf("第二次:");
scanf("%s", p1->cj2 );
printf("第三次:");
scanf("%s", p1->cj3 );
printf("第四次:");
scanf("%s", p1->cj4 );
printf("第五次:");
scanf("%s", p1->cj5 );
printf("第六次:");
scanf("%s", p1->cj6 );
printf("第七次:");
scanf("%s", p1->cj7 );
printf("第八次:");
scanf("%s", p1->cj8 );
printf("第九次:");
scanf("%s", p1->cj9 );
printf("第十次:");
scanf("%s", p1->cj10 );

p2 = p1;
p1->next = (struct student *)malloc(sizeof(struct student));
p1 = p1->next;
}
p1->next = NULL;

}

void really_save( void )//储存到文件
{
struct student *p1;
FILE * fp;
char fname[30];

while (1)
{
printf("输入要存入的文件名(如果文件已存在,将会被覆盖!):");
scanf("%s", fname );

fp = fopen(fname, "w");
if (fp == NULL)
{
puts("打开失败!");
continue;
}
else
{
break;
}
}

p1 = head;
while ( p1->next != NULL )
{
fprintf(fp, "%s %s %s %s %s %s %s %s %s %s %s %s %s \t ", p1->num, p1->name, p1->cla, p1->cj1, p1->cj2, p1->cj3, p1->cj4, p1->cj5, p1->cj6, p1->cj7, p1->cj8, p1->cj9, p1->cj10 );
p1 = p1->next;

}
fclose(fp);

}

void save( void )//判断是否要保存
{
char ch;

while (1)
{
fflush(stdin);
printf("是否保存?(Y/N):");
scanf("%c", &ch);
switch (ch)
{
case 'N':
printf("确定不保存?(Y/N):");
scanf("%c", &ch);
if ('N'==ch||'n'==ch)
{
continue;
}
else if ('Y'==ch||'y'==ch)
{
break;
}
else
{
puts("输入错误!");
continue;
}

case 'Y':
case 'y':
really_save();
break;

default:
continue;
}
break;
}
}

void read( void ) //将文件中的内容保存到链表中
{
FILE * fp;
char fname[30];


while (1)
{
printf("输入要打开的文件名:");
scanf("%s", fname );

if (!(fp = fopen(fname, "r" )))
{
puts("\n打开失败!\n");
system("PAUSE");
continue;
}
else
{
p1 = (struct student *)malloc( sizeof(struct student) );
head = p1;
do
{
fscanf(fp, "%s%s%s%s%s%s%s%s%s%s%s%s%s", p1->num, p1->name, p1->cla, p1->cj1, p1->cj2, p1->cj3, p1->cj4, p1->cj5, p1->cj6, p1->cj7, p1->cj8, p1->cj9, p1->cj10);

p2 = p1;
p1->next = (struct student *)malloc( sizeof(struct student) );
p1 = p1->next;
}
while (!feof(fp));
p2->next = NULL;
fclose(fp);

break;
}
}
}

void output( void ) //将链表中的数据输出
{
read();
puts("\n学号 姓名 班级 第一次 第二次 第三次 第四次 第五次 第六次 第七次 第八次 第九次 第十次 \n");
p1 = head;
do
{
printf("%s %s %s %s %s %s %s %s %s %s %s %s %s \n", p1->num, p1->name, p1->cla, p1->cj1, p1->cj2, p1->cj3, p1->cj4, p1->cj5, p1->cj6, p1->cj7, p1->cj8, p1->cj9, p1->cj10 );
p1 = p1->next;
}while ( p1->next != NULL );
printf("\n");
}

void print(struct student * p) //输出一个结构体数据
{
printf("%s %s %s %s %s %s %s %s %s %s %s %s %s \n", p->num, p->name, p1->cla, p->cj1, p->cj2, p->cj3, p->cj4, p->cj5, p->cj6, p->cj7, p->cj8, p->cj9, p->cj10 );
}


void find( void ) //找到目标并输出
{
char fin[30];

read();
printf("请输入要查找的内容:");
scanf("%s", fin );
puts("\n学号 班级 第一次 第二次 第三次 第四次 第五次 第六次 第七次 第八次 第九次 第十次 \n");

p1 = head;
do
{
//按学号
if (0 == strcmp(fin, p1->num ))
{
print(p1);
}

//按姓名
if (0 == strcmp(fin, p1->name ))
{
print(p1);
}
//按班级
if (0 == strcmp(fin, p1->cla ))
{
print(p1);
}

//按第一次成绩
if (0 == strcmp(fin, p1->cj1 ))
{
print(p1);
}

//按第二次成绩
if (0 == strcmp(fin, p1->cj2))
{
print(p1);
}

//按第三次成绩
if (0 == strcmp(fin, p1->cj3 ))
{
print(p1);
}

//按第四次成绩
if (0 == strcmp(fin, p1->cj4 ))
{
print(p1);
}

//按第五次成绩
if (0 == strcmp(fin, p1->cj5 ))
{
print(p1);
}

//按第六次成绩
if (0 == strcmp(fin, p1->cj6 ))
{
print(p1);
}

//按第七次成绩
if (0 == strcmp(fin, p1->cj7 ))
{
print(p1);
}

//按第八次成绩
if (0 == strcmp(fin, p1->cj8 ))
{
print(p1);
}

//按第九次成绩
if (0 == strcmp(fin, p1->cj9 ))
{
print(p1);
}

//按第十次成绩
if (0 == strcmp(fin, p1->cj10 ))
{
print(p1);
}

p1 = p1->next;
}
while (p1 != NULL);
printf("\n");
}

void dele( void ) //删除某一个结构体数据
{
char ch, de[30];
int i=0;

read();
while (1)
{
printf("输入要删除的学号:");
scanf("%s", de );


p1 = head;
printf("\n");
do
{
if (0 == strcmp(de, p1->num ))
{
print(p1);
break;
}
i++; //判断要删除的是不是链表第一个
p2 = p1;
p1 = p1->next;
}
while (p1 != NULL);

if (p1 == NULL)
{
puts("未找到!");
continue;
}
else
{
break;
}

}

while (1)
{
fflush(stdin);
printf("\n确定删除?(Y/N):");
scanf("%c", &ch);
switch (ch)
{
case 'Y':
case 'y':
{
if (i==0)
{
head = p1->next;
}
else
{
p2->next = p1->next;
}

break;
}
case 'N':
case 'n':
{
break;
}
default: continue;
}

break;
}

save();
}

void really_change( struct student * p)//修改链表的某一项
{
int n;
char change[30];
puts("选择要修改的选项:");
puts("\t 1. 学号 ");
puts("\t 2. 姓名 ");
puts("\t 3. 班级 ");
puts("\t 4. 第一次 ");
puts("\t 5. 第二次 ");
puts("\t 6. 第三次 ");
puts("\t 7. 第四次 ");
puts("\t 8. 第五次 ");
puts("\t 9. 第六次 ");
puts("\t 10.第七次 ");
puts("\t 11.第八次 ");
puts("\t 12.第九次 ");
puts("\t 13.第十次 ");


while (1)
{
while (1)
{
puts("请选择:");
scanf("%d", &n);
if (n>13 || n<1)
{
puts("输入错误!");
}
else
{
puts("请输入修改数据:");
scanf("%s", change);
break;
}
}

switch (n)
{
case 1:
{
strcpy(p->num, change);
break;
}
case 2:
{
strcpy(p->name, change);
break;
}
case 3:
{
strcpy(p->cla, change);
break;
}
case 4:
{
strcpy(p->cj1, change);
break;
}
case 5:
{
strcpy(p->cj2, change);
break;
}
case 6:
{
strcpy(p->cj3, change);
break;
}
case 7:
{
strcpy(p->cj4, change);
break;
}
case 8:
{
strcpy(p->cj5, change);
break;
}
case 9:
{
strcpy(p->cj6, change);
break;
}
case 10:
{
strcpy(p->cj7, change);
break;
}
case 11:
{
strcpy(p->cj8, change);
break;
}
case 12:
{
strcpy(p->cj9, change);
break;
}
case 13:
{
strcpy(p->cj10, change);
break;
}
default:
{
puts("输入错误!!!");
system("CLS");
continue;
}
}
save();
break;
}
}


void change( void ) //判断是否修改
{
char ch, cha[30];

read();
printf("输入要修改的学号:");
scanf("%s", cha );

p1 = head;
do
{
if (0 == strcmp(cha, p1->num))
{
print( p1 );
break;
}
p1 = p1->next;
}
while (p1 != NULL);

while (1)
{
fflush(stdin);
printf("\n 是否修改?(Y/N):");
scanf("%c", &ch);

switch ( ch )
{
case 'Y':
case 'y':
{
really_change( p1 );
break;
}
case 'N':
case 'n':
{
break;
}
default:
{
continue;
}
}

break;
}

}


int main( void ) //主函数
{

auther();

while (1)
{
switch( mainmenu() )
{
case 1:
{
input();
save();
break;
}

case 2:
{
output();
break;
}
case 3:
{
find();
break;
}
case 4:
{
dele();
break;
}
case 5:
{
change();
break;
}
case 0:
{
system("PAUSE");
exit(0);
}

default:
{
puts("输入错误!!!");
system("PAUSE");
system("CLS");
continue;
}
}
system("PAUSE");
system("CLS");
}


return 0;
}
...全文
314 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
百曉生 2014-07-16
  • 打赏
  • 举报
回复
可以写个函数,将十个成绩加起来算平均值,哪里需要哪里调用
yaoyao_xin 2014-07-16
  • 打赏
  • 举报
回复
引用 6 楼 zhao4zhong1 的回复:
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒:再牛×的老师也无法代替学生自己领悟和上厕所! 单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。
老师点赞
赵4老师 2014-07-15
  • 打赏
  • 举报
回复
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒:再牛×的老师也无法代替学生自己领悟和上厕所! 单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。
_Cogito_ 2014-07-15
  • 打赏
  • 举报
回复
新人贴的代码都是这样,楼上各位提醒了楼主一个重要的问题,那就是好的编程习惯会形成事半功倍的效果,建议楼主一方面多理解一些常用算法用来解决楼主的任务,一方面学会代码复用、缩进、格式等等习惯,其中好处楼主自行百度并结合编程实际理解。 PS :以后论坛上贴代码用这样的形式,看着不至于头大
for(int i=0;i<10;i++)
{
    sum += grades[i];
}
avg = sum/10;
Code_headache 2014-07-05
  • 打赏
  • 举报
回复
看到成片的代码真心没有看下去的欲望,思路很简单写个以为数组a[10],将需要处理数据存入数组中,求个总和再除10不就行了?
FightForProgrammer 2014-07-05
  • 打赏
  • 举报
回复
学会整理自己的代码。自己维护自己的代码
threenewbee 2014-07-04
  • 打赏
  • 举报
回复
设计程序有一个原则就是 don't repeat itself,也就是重复的代码不要出现,你的代码中大量相似的代码就是你需要改进的目标。
  • 打赏
  • 举报
回复
这代码格式让人情何以堪 你数据都有了 全部加一起除以十 不就完了
小白利用PHP+MYSQL+HTML做的期末小项目,做的不好大家勿喷,还请多多指正。 用的是以前模仿做的HTML淘宝网静态页面,接连上数据库加入图片和信息,实现后台与前端的连接,实现了增删改查功能美化做的不好还请大家勿喷。呜呜呜,做了很久也只能实现这样一个效果了,要是有大神希望帮帮我改改项目,静态页面的美化会做,但是连接上PHP数据库后出来的一个效果如何美化就不知道如何才能实现了,希望有大佬教教我,可以看看我的整体一个作品,至少基础功能都可以实现,里面还放了几张同学的照片哈哈哈,皮一下,看到了不要骂我宝贝……最后一个重中之重,如何美化界面还请大神指点啊哈哈哈哈…………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………
网上目前能找到的基于MATLAB神经网络的调制方式识别只有那个识别六种信号的神经网络程序,我也下载研究了一下,发现其代码实现的功能是自己选择训练一组对单一信号的调制神经网络,之后再用同一个信号来验证。举个例子,其实现的效果就是我向神经网络训练2ASK信号,在用训练的2ASK检测,神经网络检测出输入的信号是2ASK信号。而我向里面输入2FSK信号用来检测便检测不出来,所以其实现的并不是我们希望神经网络实现的功能。而且我也对那个程序里面运行后的各种参数观察了一下,发现其实现的并不能区分不同信号的调制识别方式。与是我写了一个应用MATLAB神经网络对信号调制方式识别的程序,目前只是起步阶段,只实现了应用瞬时参数γmax来区分2FSK,2ASK的信号调制方式识别。目前测试是实现了我想实现的功能。这个程序设置的免积分可下载,希望各位志同道合和我一样的小白们一起共同进步,也希望大神们不吝指点。 通过MATLAB的神经网络函数,训练了一组通过瞬时参数γmax来区分2FSK,2ASK的信号调制方式识别。 .m文件sig_2ASK和sig_2FSK用来生成输入数据2ASK_train,2FSK_train和测试数据2ASK_test和2FSK_test,network_2ASK_2FSK是训练的神经网络,对训练好的神经网络保存命名为net,netout是应用训练好的神经网络对输入信号进行调制方式识别检测。 代码下载好直接运行netout就可看出实现效果。

33,311

社区成员

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

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