uva12412,找不到哪里出错了

lsh_001 2017-08-06 10:17:29
不执行删除操作都没有问题,一执行删除操作就会导致添加信息模块无法判断是否已有当前输入的学号,不知道是哪里出了问题,有没有大神帮忙看一下,另外这个是UVA12412的题目。
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define maxn 1000
int n=0;
int cid,Chinese,Mathematics,English,Programming;
char sid[15],name[15],s[15];
const char* course_name[] = {"Chinese", "Mathematics", "English", "Programming"};
struct student
{
int cid,del;
int score[5];//Chinese,Mathematics,English,Programming,total按顺序
double average;
char name[10],sid[10];
}stu[maxn];
void Print_Menu()
{
printf("Welcome to Student Performance Management System (SPMS).\n\n");
printf("1 - Add\n");
printf("2 - Remove\n");
printf("3 - Query\n");
printf("4 - Show ranking\n");
printf("5 - Show Statistics\n");
printf("0 - Exit\n\n");
}
int vaild()//判断是否有相同学号已经存在
{
for(int i=0;i<n;i++)
{
if(!stu[i].del)
if(strcmp(stu[i].sid,sid)==0)
return 0;
}
return 1;
}
int Rank(int k)//按成绩排序
{
int cnt=0;
for(int i=0;i<n;i++)
if(!stu[i].del&&stu[i].score[4]>stu[k].score[4])
{
cnt++;
}
return cnt+1;
}
void Add()//添加信息
{
for(;;)
{
printf("Please enter the SID, CID, name and four scores. Enter 0 to finish.\n");
scanf("%s",sid);
if(strcmp(sid,"0")==0) break;
scanf("%d%s%d%d%d%d",&cid,name,&Chinese,&Mathematics,&English,&Programming);
if(!vaild())
printf("Duplicated SID.\n");
else
{
strcpy(stu[n].sid,sid);
stu[n].cid=cid;
strcpy(stu[n].name,name);
stu[n].score[0]=Chinese;
stu[n].score[1]=Mathematics;
stu[n].score[2]=English;
stu[n].score[3]=Programming;
stu[n].score[4]=stu[n].score[0]+stu[n].score[1]+stu[n].score[2]+stu[n].score[3];
stu[n].average=stu[n].score[4]*1.0/4;
stu[n].del=0;
n++;
}
}
}
void Remove()//删除信息
{
for(;;)
{
printf("Please enter SID or name. Enter 0 to finish.\n");
scanf("%s",s);
if(strcmp(s,"0")==0) break;
int cnt=0;
for(int i=0;i<n;i++)
{
if(!stu[i].del&&(strcmp(s,stu[i].sid)==0||strcmp(s,stu[i].name)==0))
{
stu[i].del=1;
++cnt;
}
}
printf("%d student(s) removed.\n",cnt);
}
}
void Query()//查询信息
{
for(;;)
{
printf("Please enter SID or name. Enter 0 to finish.\n");
scanf("%s",s);
if(strcmp(s,"0")==0) break;
for(int i=0;i<n;i++)
if(!stu[i].del&&(!strcmp(s,stu[i].sid)||!strcmp(s,stu[i].name)))
{
printf("%d %s %d %s ",Rank(i),stu[i].sid,stu[i].cid,stu[i].name);
printf("%d %d %d %d ",stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3]);
printf("%d %.2f\n",stu[i].score[4],stu[i].average);
}
}
}
void Statistics()//显示班级、总体信息
{
printf("Please enter class ID, 0 for the whole statistics.\n");
int cid,i,j,passed,failed,total,cnt,cnt1;
scanf("%d",&cid);
int p[5];
memset(p,0,sizeof(p));
if(!cid)//输入0,显示全部学生的总体情况
{
for(i=0;i<4;i++)
{
passed=0,failed=0,total=0,cnt=0;
for(j=0;j<n;j++)
{
if(!stu[j].del)
{
cnt++;
total+=stu[j].score[i];
if(stu[j].score[i]>=60)
passed++;
else
failed++;
}
}
printf("%s\n",course_name[i]);
printf("Average Score: %.2f\n",total*1.0/cnt);
printf("Number of passed students: %d\n",passed);
printf("Number of failed students: %d\n\n",failed);
}
for(i=0;i<n;i++)
{
if(!stu[i].del)
{
cnt1=0;
for(j=0;j<4;j++)
{
if(stu[i].score[j]>=60)
cnt1++;
}
for(int k=1;k<=cnt1;k++)
p[k]++;
if(cnt1==0) p[0]++;
}
}
printf("Overall:\n");
printf("Number of students who passed all subjects: %d\n",p[4]);
printf("Number of students who passed 3 or more subjects: %d\n",p[3]);
printf("Number of students who passed 2 or more subjects: %d\n",p[2]);
printf("Number of students who passed 1 or more subjects: %d\n",p[1]);
printf("Number of students who failed all subjects: %d\n\n",p[0]);
}
else//输入班级号码,显示该班级的总体情况
{
for(i=0;i<4;i++)
{
passed=0,failed=0,total=0,cnt=0;
for(j=0;j<n;j++)
{
if(!stu[j].del&&stu[j].cid==cid)
{
cnt++;
total+=stu[j].score[i];
if(stu[j].score[i]>=60)
passed++;
else
failed++;
}
}
printf("%s\n",course_name[i]);
printf("Average Score: %.2f\n",total*1.0/cnt);
printf("Number of passed students: %d\n",passed);
printf("Number of failed students: %d\n\n",failed);
}
for(i=0;i<n;i++)
{
if(!stu[i].del&&stu[i].cid==cid)
{
cnt1=0;
for(j=0;j<4;j++)
{
if(stu[i].score[j]>=60)
cnt1++;
}
for(int k=1;k<=cnt1;k++)
p[k]++;
if(cnt1==0) p[0]++;
}
}
printf("Overall:\n");
printf("Number of students who passed all subjects: %d\n",p[4]);
printf("Number of students who passed 3 or more subjects: %d\n",p[3]);
printf("Number of students who passed 2 or more subjects: %d\n",p[2]);
printf("Number of students who passed 1 or more subjects: %d\n",p[1]);
printf("Number of students who failed all subjects: %d\n\n",p[0]);
}
}
int main()
{
//
//freopen("input.txt","r",stdin);
//freopen("output.txt","w",stdout);
//
for(;;)
{
Print_Menu();//打印主菜单
int choice;
scanf("%d",&choice);
if(choice==0) break;
if(choice==1) {Add();}//添加信息,然后排名
if(choice==2) {Remove();}//删除信息,然后排名
if(choice==3) Query();//查询信息
if(choice==4) printf("Showing the ranklist hurts students' self-esteem. Don't do that.\n");
if(choice==5) Statistics();//显示整体信息
}
return 0;
}
...全文
244 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
OldHello 2017-08-07
  • 打赏
  • 举报
回复
测试未发现问题
灌水号 2017-08-07
  • 打赏
  • 举报
回复
已经已经删除的,不再检查sid..

64,678

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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