当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 24 篇帖子 ]  前往页数 1, 2  下一页
作者 内容
1 楼 
 文章标题 : ★!情况紧急!★一道简单的C作业,希望高手解惑
帖子发表于 : 2010-06-24 15:28 
头像

注册: 2010-06-22 12:32
帖子: 9
送出感谢: 0 次
接收感谢: 0 次
:em02 用GCC编译, 能否把排序函数void sort()修改一下,不能正确显示。能否把删除记录函数void del()修改为查询函数,根据学号查询就行了,哪位高手能帮忙解答?无限感激!
★o(︶︿︶)o唉待修改部分为红色。
以下在Linux下编译可以通过,只是函数多了几个,题目对高手来说简单得很啦。 :em06 (⊙_⊙?)

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

void homepage(); //主界面
void display(); //显示全部成绩
void input(); //录入 插入
void del(); //删除记录
void sort(); //排序
void waiting(); //等待界面
void quit(); //退出界面
struct student
{
int num;
char name[15];
float score[3];
float avg;
};
int count=0; //当前学生个数
int sort_type=0; //当前排序类型
struct student stu[10];
void main()
{
int i,k=0;
char username[15],pwd[6];
system("color 3f");
printf("\n\n");
printf(" \t┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
printf(" \t┃**********************************************************┃\n");
printf(" \t┃***┏━━━━━━━━━━━━━━━━━━━━━━━━┓***┃\n");
printf(" \t┃***┃************************************************┃***┃\n");
printf(" \t┃***┃*** ****┃***┃\n");
printf(" \t┃***┃*** 欢迎使用学生成绩管理系统 ****┃***┃\n");
printf(" \t┃***┃*** ****┃***┃\n");
printf(" \t┃***┃*** ****┃***┃\n");
printf(" \t┃***┃*** 电子信息工程 ****┃***┃\n");
printf(" \t┃***┃*** 孙柔嘉 ****┃***┃\n");
printf(" \t┃***┃*** 2010-06-20 ****┃***┃\n");
printf(" \t┃***┃*** ****┃***┃\n");
printf(" \t┃***┃************************************************┃***┃\n");
printf(" \t┃***┗━━━━━━━━━━━━━━━━━━━━━━━━┛***┃\n");
printf(" \t┃**********************************************************┃\n");
printf(" \t┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
for(i=0;i<3;i++)
{
printf("\n请输入用户名:");
scanf("%s",username);
printf("\n请输入6位密码:");
scanf("%s",pwd);
getchar();
if((strcmp(username,"srj")==0)&&(strcmp(pwd,"123456")==0))
{
printf("\n您已经成功登录\n");
k=1;
for(i=0;i<20;i++)
{
printf(".");
usleep(100);
}
system("clear");
homepage();
break;
}
else
printf("\n用户名或密码无效 请重新输入:\n");
continue;
}
if(k==0)
printf("\n连续输入错误3次 将退出程序\n");
usleep(2000);
quit();
}


void homepage()
{
char n;
printf("\n\n");
printf("\t┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
printf("\t┃************************************************************┃\n");
printf("\t┃* * *┃\n");
printf("\t┃* 1.显示成绩 * 2.录入成绩 *┃\n");
printf("\t┃* * *┃\n");
printf("\t┃************************************************************┃\n");
printf("\t┃* * *┃\n");
printf("\t┃* 3.删除记录 * 4.排序 *┃\n");
printf("\t┃* * *┃\n");
printf("\t┃************************************************************┃\n");
printf("\t┃* *┃\n");
printf("\t┃* 0.退出程序 *┃\n");
printf("\t┃* *┃\n");
printf("\t┃************************************************************┃\n");
printf("\t┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
while ((n!='1')&&(n!='2')&&(n!='3')&&(n!='4')&&(n!='0'))
{
printf("\n请选择:");
fflush(stdin);
scanf("%c",&n);
getchar();
switch(n)
{
case '1':
display();
break;
case '2':
if(count<10)
input();
else
{
printf("记录数已满\n");
usleep(2000);
system("clear");
homepage();
}
break;
case '3':
del();
break;
case '4':
sort();
case '0':
quit();
break;
default:
printf("\n选项错误\n");
}
}
}


void display()
{
int i;
char c;
system("clear");
switch(sort_type)
{
case 0:
printf("\t\t未排序:\n\n");
break;
case 1:
printf("\t\t按学号排序:\n\n");
break;
case 2:
printf("\t\t按成绩1排序:\n\n");
break;
case 3:
printf("\t\t按成绩2排序:\n\n");
break;
case 4:
printf("\t\t按成绩3排序:\n\n");
break;
case 5:
printf("\t\t按平均成绩排序:\n\n");
break;
}
printf("\t学号\t姓名\t成绩1\t成绩2\t成绩3\t平均成绩\n");
for(i=0;i<count;i++)
{
printf("\t%d\t%s\t%5.2f\t%5.2f\t%5.2f\t%5.2f\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].avg);
}
printf("\n\n按任意键返回\n");
c=getchar();
getchar();
system("clear");
homepage();
}

void input()
{
int i,numcheck;
char c;
system ("clear");


do
{
printf("学号:\n");
scanf("%d",&stu[count].num);
numcheck=1;
if(stu[count].num<0)
printf("请输入正整数:\n");
for(i=0;i<count;i++)
{
if(stu[count].num==stu[i].num)
{
numcheck=0;
printf("学号重复,重新输入:\n");
}
}
}while(!numcheck);
printf("姓名:\n");
fflush(stdin);
scanf("%s",stu[count].name);
for(i=0;i<3;i++)
{
printf("第%d门课成绩:\n",i+1);
scanf("%f",&stu[count].score[i]);
getchar();
}
stu[count].avg=(stu[count].score[0]+stu[count].score[1]+stu[count].score[2])/3;
printf("是否继续输入(y/n):\n");
do
{
c=getchar();
getchar();
if(c=='y'||c=='Y')
{
count++;
if(count<10)
input();
else
{
printf("记录数已满\n");
usleep(2000);
system("clear");
homepage();
}
}
else if(c=='n'||c=='N')
{
count++;
system("clear");
homepage();
}
else;
}while((c!='y')&&(c!='n')&&(c!='Y')&&(c!='N'));

}
void del()
{
int i,j,del_num,match=0;
char c;
system("clear");
printf("请输入要删除的学生学号:\n");
scanf("%d",&del_num);
getchar();
waiting();
for(i=0;i<count;i++)
{
if(stu[i].num==del_num)
{
match=1;
for(j=i;j<count;j++)
/* {
stu[j].num=stu[j+1].num;
strcpy(stu[j].name,stu[j+1].name);
stu[j].score[0]=stu[j+1].score[0];
stu[j].score[1]=stu[j+1].score[1];
stu[j].score[2]=stu[j+1].score[2];
stu[j].avg=stu[j+1].avg;
}*/
stu[j]=stu[j+1];
}
}
if(!match)
printf("没有要找的学号.\n");
printf("是否继续删除?(y/n)");
fflush(stdin);
do
{
c=getchar();
getchar();
if(c=='y'||c=='Y')
{
count--;
del();
}
else if(c=='n'||c=='N')
{
count--;
system("clear");
homepage();
}
else;
}while((c!='y')&&(c!='n'));

}
void sort()
{
int i,j;
int choice;
struct student temp;
system("clear");
printf("\t\t请选择排序功能:\n");
printf("\t1.按学号排序\n");
printf("\t2.按成绩1排序\n");
printf("\t3.按成绩2排序\n");
printf("\t4.按成绩3排序\n");
printf("\t5.按平均成绩排序\n");
do
{
scanf("%d",&choice);
getchar();
}while((choice!=1)&&(choice!=2)&&(choice!=3)&&(choice!=4)&&(choice!=5));
switch(choice)
{
case 1:
{
for(i=0;i<count-1;i++)
{
for(j=0;j<count-i-1;j++)
{
if(stu[j].num>stu[j+1].num)
{
temp=stu[j];
stu[j]=stu[j+1];
stu[j+1]=temp;
}
}
}
sort_type=1;
break;
}
case 2:
{
for(i=0;i<count-1;i++)
{
for(j=0;j<count-i-1;j++)
{
if(stu[j].score[0]<stu[j+1].score[0])
{
temp=stu[j];
stu[j]=stu[j+1];
stu[j+1]=temp;
}
}
}
sort_type=2;
break;
}
case 3:
{
for(i=0;i<count-1;i++)
{
for(j=0;j<count-i-1;j++)
{
if(stu[j].score[1]<stu[j+1].score[1])
{
temp=stu[j];
stu[j]=stu[j+1];
stu[j+1]=temp;
}
}
}
sort_type=3;
break;
}
case 4:
{
for(i=0;i<count-1;i++)
{
for(j=0;j<count-i-1;j++)
{
if(stu[j].score[2]<stu[j+1].score[2])
{
temp=stu[j];
stu[j]=stu[j+1];
stu[j+1]=temp;
}
}
}
sort_type=4;
break;
}
case 5:
{
for(i=0;i<count-1;i++)
{
for(j=0;j<count-i-1;j++)
{
if(stu[j].avg<stu[j+1].avg)
{
temp=stu[j];
stu[j]=stu[j+1];
stu[j+1]=temp;
}
}
}
sort_type=5;
break;
}
}
system("clear");
waiting();
homepage();


}

void waiting()
{
int i;
printf("\n\t请稍侯...........");
for(i=0;i<25;i++)
{
switch(i%4)
{
case 1:printf("\b\\");break;
case 2:printf("\b-");break;
case 3:printf("\b/");break;
case 0:printf("\b|");break;
}
usleep(100);
}
system("clear");
}
void quit()
{
system("clear");
printf("\n\n");
printf("\t┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
printf("\t┃************************************************************┃\n");
printf("\t┃* *┃\n");
printf("\t┃* 谢谢使用本程序 *┃\n");
printf("\t┃************************************************************┃\n");
printf("\t┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n");

}


最后由 2624100 编辑于 2010-06-25 11:30,总共编辑了 1 次

页首
 用户资料  
 
2 楼 
 文章标题 : Re: ★!情况紧急!★一道简单的C作业,希望高手解惑
帖子发表于 : 2010-06-24 18:30 
头像

注册: 2008-03-25 15:49
帖子: 25878
地址: 谁知道?
送出感谢: 8
接收感谢: 10
柔嘉 girl :?
我先瞧瞧 :em04


页首
 用户资料  
 
3 楼 
 文章标题 : Re: ★!情况紧急!★一道简单的C作业,希望高手解惑
帖子发表于 : 2010-06-24 18:38 
头像

注册: 2008-03-25 15:49
帖子: 25878
地址: 谁知道?
送出感谢: 8
接收感谢: 10
del改查询的好弄些啊 直接打印出来不删就行
sort哪错了 :em06


页首
 用户资料  
 
4 楼 
 文章标题 : Re: ★!情况紧急!★一道简单的C作业,希望高手解惑
帖子发表于 : 2010-06-24 18:49 
头像

注册: 2009-08-06 22:48
帖子: 149
送出感谢: 0 次
接收感谢: 0 次
pig@pig-laptop:~$ gcc dsa.c
dsa.c:388: warning: conflicting types for ‘waiting’
dsa.c:236: note: previous implicit declaration of ‘waiting’ was here
pig@pig-laptop:~$
:em06


_________________
无论如何,不要徘徊,不要止步。
——《古国三部曲》


页首
 用户资料  
 
5 楼 
 文章标题 : Re: ★!情况紧急!★一道简单的C作业,希望高手解惑
帖子发表于 : 2010-06-24 18:53 
头像

注册: 2009-08-06 22:48
帖子: 149
送出感谢: 0 次
接收感谢: 0 次
晕,给大家点提示。用户名srj,密码123456,然后进去会有BUG :em06
慢慢看


_________________
无论如何,不要徘徊,不要止步。
——《古国三部曲》


页首
 用户资料  
 
6 楼 
 文章标题 : Re: ★!情况紧急!★一道简单的C作业,希望高手解惑
帖子发表于 : 2010-06-24 18:56 
头像

注册: 2009-08-06 22:48
帖子: 149
送出感谢: 0 次
接收感谢: 0 次
未排序:

学号 姓名 成绩1 成绩2 成绩3 平均成绩
1 pig 23.00 23.00 23.00 23.00
12 tenzu 10.00 10.00 10.00 10.00
4 zis 34.00 45.00 55.00 44.67


按任意键返回

此处有bug,按任意键不返回。其余正在找


_________________
无论如何,不要徘徊,不要止步。
——《古国三部曲》


页首
 用户资料  
 
7 楼 
 文章标题 : Re: ★!情况紧急!★一道简单的C作业,希望高手解惑
帖子发表于 : 2010-06-24 19:02 
头像

注册: 2009-08-06 22:48
帖子: 149
送出感谢: 0 次
接收感谢: 0 次
del函数中:
else if(c=='n'||c=='N')
{
count--;

此处有bug,假若欲删除的学生学号未查到,此处不应执行count--;

lz能搞个流程图么?太晕了。偶菜鸟,。


_________________
无论如何,不要徘徊,不要止步。
——《古国三部曲》


页首
 用户资料  
 
8 楼 
 文章标题 : Re: ★!情况紧急!★一道简单的C作业,希望高手解惑
帖子发表于 : 2010-06-24 19:05 
头像

注册: 2009-08-06 22:48
帖子: 149
送出感谢: 0 次
接收感谢: 0 次
while((choice!=1)&&(choice!=2)&&(choice!=3)&&(choice!=4)&&(choice!=5));

此处较复杂,为啥不choice<1||choice>5


_________________
无论如何,不要徘徊,不要止步。
——《古国三部曲》


页首
 用户资料  
 
9 楼 
 文章标题 : Re: ★!情况紧急!★一道简单的C作业,希望高手解惑
帖子发表于 : 2010-06-24 19:06 
头像

注册: 2008-03-25 15:49
帖子: 25878
地址: 谁知道?
送出感谢: 8
接收感谢: 10
摸拜ls


页首
 用户资料  
 
10 楼 
 文章标题 : Re: ★!情况紧急!★一道简单的C作业,希望高手解惑
帖子发表于 : 2010-06-24 19:09 
头像

注册: 2009-08-06 22:48
帖子: 149
送出感谢: 0 次
接收感谢: 0 次
学号重复,重新输入:
学号:
学号重复,重新输入:
学号:
学号重复,重新输入:
学号:
学号重复,重新输入:
学号:
学号重复,重新输入:
学号:

//遇到了传说中的死循环,冏


_________________
无论如何,不要徘徊,不要止步。
——《古国三部曲》


页首
 用户资料  
 
11 楼 
 文章标题 : Re: ★!情况紧急!★一道简单的C作业,希望高手解惑
帖子发表于 : 2010-06-24 19:09 
头像

注册: 2009-08-06 22:48
帖子: 149
送出感谢: 0 次
接收感谢: 0 次
pocoyo 写道:
摸拜ls

一起来呗。反正天热还不想吃饭


_________________
无论如何,不要徘徊,不要止步。
——《古国三部曲》


页首
 用户资料  
 
12 楼 
 文章标题 : Re: ★!情况紧急!★一道简单的C作业,希望高手解惑
帖子发表于 : 2010-06-24 19:16 
头像

注册: 2009-08-06 22:48
帖子: 149
送出感谢: 0 次
接收感谢: 0 次
void sort()修改一下,不能正确显示。

lz说的问题,估计不在sort函数中。应该在homepage中(又看了一边,估计是display里面)。应该是6楼的bug导致的。

偶菜鸟,继续找找不出来bug了。代码偶不大会改。怕改错了, :em06

闪,吃饭去。


_________________
无论如何,不要徘徊,不要止步。
——《古国三部曲》


页首
 用户资料  
 
13 楼 
 文章标题 : Re: ★!情况紧急!★一道简单的C作业,希望高手解惑
帖子发表于 : 2010-06-24 19:24 
头像

注册: 2009-08-06 22:48
帖子: 149
送出感谢: 0 次
接收感谢: 0 次
display 中
printf("\n \n按任意键返回\n");
c=getchar();
getchar();

后两句随便屏蔽一个就OK了。


_________________
无论如何,不要徘徊,不要止步。
——《古国三部曲》


页首
 用户资料  
 
14 楼 
 文章标题 : Re: ★!情况紧急!★一道简单的C作业,希望高手解惑
帖子发表于 : 2010-06-24 19:55 
头像

注册: 2009-08-06 22:48
帖子: 149
送出感谢: 0 次
接收感谢: 0 次
del中


stu[j]=stu[j+1];
count--;//****************添加
break;//**********添加
}

}

if(c=='y'||c=='Y')
{
//count--;//***************注释掉
del();
}
else if(c=='n'||c=='N')
{
//count--;//***************注释掉
system("clear");
homepage();
}

然后删除就正常了。
未排序:

学号 姓名 成绩1 成绩2 成绩3 平均成绩
1 pig 1.00 2.00 3.00 2.00
2 srj 1.00 1.00 1.00 1.00


按任意键返回

请稍侯..........|是否继续删除?(y/n)
未排序:

学号 姓名 成绩1 成绩2 成绩3 平均成绩
2 srj 1.00 1.00 1.00 1.00


按任意键返回



然后输入学号1实验删除:

请稍侯..........| 没有要找的学号.
是否继续删除?(y/n)

未排序:

学号 姓名 成绩1 成绩2 成绩3 平均成绩
2 srj 1.00 1.00 1.00 1.00


按回车键返回 //此处也修改了。如果输入任意键,比如a+回车会对其他函数的运行有影响。

LZ慢慢改, :em20


_________________
无论如何,不要徘徊,不要止步。
——《古国三部曲》


页首
 用户资料  
 
15 楼 
 文章标题 : Re: ★!情况紧急!★一道简单的C作业,希望高手解惑
帖子发表于 : 2010-06-25 11:29 
头像

注册: 2010-06-22 12:32
帖子: 9
送出感谢: 0 次
接收感谢: 0 次
:ema9 非常感谢pig2009xp 和pocoyo 的热情回帖与帮助,可是问题还没解决哦,哪位大侠可以伸出援手?:emb2


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 24 篇帖子 ]  前往页数 1, 2  下一页

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 3 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译