求助各位大佬,受小菜鸟一拜

我编了一个帮老师算分的程序,但是不知为什么当指令为5、6、7的时候莫名其妙停止工作了

#include <bits/stdc++.h>
#include <time.h>
#include <windows.h> 
using namespace std;
string nowdate,stu_name[110],wri_name[110],mis_date[110],mis_name[110];
int stu_num,wri_num,wri_sco[110][110],nor_sco[110],mis_num,mis_hash[110][110],mis_app[110];
void read_time()
{
	time_t t = time(0); 
    char tmp[64]; 
    strftime( tmp, sizeof(tmp), "%Y-%m-%d",localtime(&t) ); 
    nowdate=tmp;
    return ;
}
void read_data()
{
	freopen("data.data","r",stdin);
	cin>>stu_num;
	for (int i=1;i<=stu_num;i++)
	{
		cin>>stu_name[i];
	}
	//cout<<1<<endl; 
	cin>>wri_num;
	for (int i=1;i<=wri_num;i++)
	{
		cin>>wri_name[i];
	}
	//cout<<1<<endl; 
	for (int i=1;i<=stu_num;i++)
	{
		for (int j=1;j<=wri_num;j++)
		{
			if(stu_name[i][0]=='-')
			{
				continue;
			}
			cin>>wri_sco[i][j];
		}
	}
	//cout<<1<<endl; 
	for (int i=1;i<=stu_num;i++)
	{
		if(stu_name[i][0]=='-')continue;
		cin>>nor_sco[i];
	}
	cin>>mis_num;
	//cout<<1<<endl; 
	for (int i=1;i<=mis_num;i++)
	{
		cin>>mis_date[i]>>mis_name[i]>>mis_app[i];
		for (int j=1;j<=stu_num;j++)
		{
			cin>>mis_hash[i][j];
		}
	}
	//cout<<1<<endl; 
	fclose(stdin);
}
bool IsLeap(int year)
{
   return (year % 4 ==0 || year % 400 ==0) && (year % 100 !=0);
}
bool StringToDate(string date, int& year, int& month, int& day)
{
    year = atoi((date.substr(0,4)).c_str());
    month = atoi((date.substr(5,2)).c_str());
    day = atoi((date.substr(8,2)).c_str());
    int DAY[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    if(IsLeap(year)){
         DAY[1] = 29;
    }
    return year >= 0 && month<=12 && month>0 && day<=DAY[month] && day>0;
}
int DayInYear(int year, int month, int day)
{
    int DAY[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    if(IsLeap(year))
        DAY[1] = 29;
    for(int i=0; i<month - 1; ++i)
    {
        day += DAY[i];
    }
    return day;
}
int DaysBetween2Date(string date1, string date2)
{
     int year1, month1, day1;
     int year2, month2, day2;
     if(!StringToDate(date1, year1, month1, day1) || !StringToDate(date2, year2,month2,day2))
     {
        cout<<"输入的日期格式不正确";
        return -1;
     }
     if(year1 == year2 && month1 == month2)
     {
          return day1 > day2 ? day1 - day2 : day2 - day1;
     }else if(year1 == year2)
     {
         int d1, d2;
         d1 = DayInYear(year1, month1, day1);
         d2 = DayInYear(year2, month2, day2);
         return d1 > d2 ? d1 - d2 : d2 - d1;
     }else{
         if(year1 > year2)
         {
             swap(year1, year2);
             swap(month1, month2);
             swap(day1, day2);
         }
         int d1,d2,d3;
         if(IsLeap(year1))
             d1 = 366 - DayInYear(year1,month1, day1); 
         else
             d1 = 365 - DayInYear(year1,month1, day1);
         d2 = DayInYear(year2,month2,day2); 
         d3 = 0;
         for(int year = year1 + 1; year < year2; year++)
         {
             if(IsLeap(year))
                 d3 += 366;
             else
                 d3 += 365;
         }
         return d1 + d2 + d3;
     }
}
void nor_sco_add(int num,int who)
{
	nor_sco[who]=nor_sco[who]+num;
}
void print_reader()
{
	freopen("reader.csv","w",stdout);
	cout<<"学号"<<","<<"姓名"<<","<<"默写成绩"<<",";
	for (int i=1;i<=wri_num;i++)
	{
		cout<<i<<".";
		cout<<wri_name[i]<<",";
	} 
	cout<<","<<"加扣分情况"<<","<<","<<"平时成绩"<<","<<"判定等第";
	cout<<endl;
	for (int i=1;i<=stu_num;i++)
	{
		cout<<i<<",";
		cout<<stu_name[i]<<",";
		if(stu_name[i][0]=='-')
		{
			cout<<endl;
		    continue;
		}
		cout<<",";
		for (int j=1;j<=wri_num;j++)
		{
			if(wri_sco[i][j]==-1)cout<<"无  ";
			else
			{
				cout<<wri_sco[i][j]<<" ";
			}
			cout<<",";
		}
		cout<<","<<nor_sco[i]<<","<<",";
		int sum,timesss;
		sum=0;timesss=0;
		for (int j=1;j<=wri_num;j++)
		{
			if(wri_sco[i][j]!=-1)
			{
				timesss++;
				sum=sum+wri_sco[i][j];
			}
		}
		if(sum==0&&timesss==0)sum=0;
		else sum=sum/timesss;
		cout<<nor_sco[i]+sum*0.5<<",";
		if(nor_sco[i]+sum*0.5>=85)cout<<"优秀"<<endl;
		else if(nor_sco[i]+sum*0.5>=70)cout<<"良好"<<endl;
			else if(nor_sco[i]+sum*0.5>=60)cout<<"合格"<<endl;
				else cout<<"不合格"<<endl; 
	}
	int jici=0; 
	cout<<endl;
	cout<<"目前仍有"<<mis_num<<","<<"个任务"<<","<<"正在进行!"<<endl;
	for (int i=1;i<=mis_num;i++)
	{
		cout<<i<<"."<<","<<"任务发布时"<<","<<"间:"<<mis_date[i]<<","<<"任务名称:"<<","<<mis_name[i]<<","<<"还有"<<mis_app[i]-DaysBetween2Date(mis_date[i],nowdate)<<"天截止 :"<<",";
		for (int j=1;j<=stu_num;j++)
		{
			if(mis_hash[i][j]==0)
			{
				cout<<stu_name[j]<<"、"<<",";
				jici++;
			} 
			if(jici==10)
			{
				cout<<endl<<","<<","<<","<<","<<","<<",";
				jici=0;
			}
		}
		cout<<endl;
	}
	fclose(stdout);
}
void print_data()
{
	freopen("data.data","w",stdout);
	cout<<stu_num<<endl;
	for (int i=1;i<=stu_num;i++)
		cout<<stu_name[i]<<endl;
	cout<<wri_num<<endl;
	for (int i=1;i<=wri_num;i++)
		cout<<wri_name[i]<<" ";
	cout<<endl;
	for (int i=1;i<=stu_num;i++)
	{
		for (int j=1;j<=wri_num;j++)
		{
			if(stu_name[i][0]=='-')
			{
				continue;
			}
			cout<<wri_sco[i][j]<<" ";
		}
		cout<<endl; 
	}
	cout<<endl;
	for (int i=1;i<=stu_num;i++)
	{
		if(stu_name[i][0]=='-')continue;
		cout<<nor_sco[i]<<endl;
	}
	cout<<mis_num<<endl;
	for (int i=1;i<=mis_num;i++)
	{
		cout<<mis_date[i]<<" "<<mis_name[i]<<" "<<mis_app[i]<<" ";
		for (int j=1;j<=stu_num;j++)
		{
			cout<<mis_hash[i][j]<<" ";
		}
		cout<<endl;
	}
	fclose(stdout);
	print_reader();
}
void check_mis()
{
	for (int i=1;i<=mis_num;i++)
	{
		if(DaysBetween2Date(mis_date[i],nowdate)>mis_app[i])
		{
			for (int j=1;j<=stu_num;j++)
			{
				if(mis_hash[i][j]==0)
				{
					nor_sco_add(-1,j);
					mis_hash[i][j]=1;
				}
			}
		}
		cout<<endl;
		int flag=1;
		for (int j=1;j<=stu_num;j++)
		{
			if(mis_hash[i][j]==0)
			{
				flag=0;break;
			}
		}
		if(flag==1)
		{
			for (int j=i;j<=mis_num-1;j++)
			{
				mis_date[j]=mis_date[j+1];
				mis_name[j]=mis_name[j+1];
				mis_app[j]=mis_app[j+1];
				for (int k=1;k<=stu_num;k++)
				{
					mis_hash[j][k]=mis_hash[j+1][k];
				}
			}
			mis_num=mis_num-1;
			i=i-1;
			continue;
		}
	}
	print_data();
}
void print_test()
{
	cout<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl;
	cout<<"******************************"<<endl;
	cout<<"       默写成绩"<<endl;
	cout<<"******************************"<<endl;
	cout<<"             ";
	for (int i=1;i<=wri_num;i++)
	{
		cout<<i;
		if(i/10==0)cout<<"."; 
		cout<<wri_name[i]<<" ";
	} 
	cout<<endl;
	for (int i=1;i<=stu_num;i++)
	{
		cout<<i;
		if(i/10==0)cout<<" ";
		cout<<" ";
		cout<<stu_name[i];
		if(stu_name[i][0]=='-')
		{
			cout<<endl;
		    continue;
		}
		for (int j=stu_name[i].size();j<=7;j=j+2)cout<<"  ";
		if(stu_name[i][0]!='*')cout<<" ";
		cout<<" ";
		for (int j=1;j<=wri_num;j++)
		{
			if(wri_sco[i][j]==-1)cout<<"无  ";
			else
			{
				cout<<wri_sco[i][j]<<" ";
				if(wri_sco[i][j]/100==0)cout<<" ";
				if(wri_sco[i][j]/10==0)cout<<" ";
			}
			for (int k=2;k<=wri_name[j].size();k=k+1)cout<<" ";
		}
		cout<<endl;
	}
	cout<<endl;
	cout<<"******************************"<<endl;
	cout<<"       加扣分情况"<<endl;
	cout<<"******************************"<<endl;
	for (int i=1;i<=stu_num;i++)
	{
		cout<<i;
		if(i/10==0)cout<<" ";
		cout<<" ";
		cout<<stu_name[i];
		if(stu_name[i]=="-")cout<<endl;
		else
		{
			int l=stu_name[i].size();
			for (int j=l;j<=7;j=j+2)cout<<"  ";
			if(stu_name[i][0]!='*')cout<<" ";
			cout<<nor_sco[i]<<endl;
		}
	}
	cout<<"**************************************************************"<<endl;
	cout<<"目前仍有"<<mis_num<<"个任务正在进行!"<<endl;
	cout<<"**************************************************************"<<endl;
	for (int i=1;i<=mis_num;i++)
	{
		cout<<i<<". 任务发布时间:"<<mis_date[i]<<" 任务名称:"<<mis_name[i]<<" 还有"<<mis_app[i]-DaysBetween2Date(mis_date[i],nowdate)<<"天截止(将要被扣分) :";
		for (int j=1;j<=stu_num;j++)
		{
			if(mis_hash[i][j]==0) cout<<stu_name[j]<<"、";
		}
		cout<<endl;
	}
}
int main()
{
	int hash[110];
	cout<<"正在加载中,请耐心等待......(温馨提示:您所有的输入数据之间请用空格隔开,每输完一条命令请换行,请确保您的所有命令正确)"<<endl;
	read_time();
	read_data();
	check_mis();
	int tot_flag=1,orders,sma_flag;
	while(tot_flag==1)
	{
		freopen("CON","r",stdin);
		freopen("CON","w",stdout);
		print_test();
		cout<<"-1退出,1为学生加平时分 2登分 3更改分数 4新建任务 5删除任务 6更改任务时间 7解除任务中学生名字"<<endl;
		cout<<"请输入指令代号:";
		cin>>orders;
		cout<<endl;
		fclose(stdin);fclose(stdout);
		if(orders==-1)
		{
			print_data();
			break;
		}
		if(orders==1)
		{
			sma_flag=1;
			freopen("CON","r",stdin);
			freopen("CON","w",stdout);
			cout<<"请顺次输入被加分的学生的学号和加分分值(扣分为负数),退出请按0"<<endl; 
			while(sma_flag==1)
			{
				int add_sco_who,add_sco_num;
				cin>>add_sco_who;
				if(add_sco_who==0)break; 
				cin>>add_sco_num;
				nor_sco_add(add_sco_num,add_sco_who);
			}
			cout<<"加分完毕!"<<endl; 
			fclose(stdin);fclose(stdout);
			sma_flag=0;
			print_data();
		}
		if(orders==2)
		{
			memset(hash,0,sizeof(hash));
			for (int i=1;i<=stu_num;i++)
			{
				if(stu_name[i]=="-")hash[i]=1;
			}
			freopen("CON","r",stdin);
			freopen("CON","w",stdout);
			wri_num++;
			cout<<"请输入本次默写/考试名称(请使用中文汉字及中文字符,不能使用英文,取消本次登分按-1):";
			cin>>wri_name[wri_num];
			if(wri_name[wri_num]=="-1")
			{
				wri_num--;
				continue;
			} 
			cout<<endl<<"请顺次输入学生学号及对应成绩:(停止输入按0,取消本次登分按-1,需要更改只需再次输入该学生的学号和更改后的分数即可)"<<endl;
			sma_flag=1;
			int wri_who;
			while(sma_flag==1)
			{
				cin>>wri_who;
				if(wri_who==0)break;
				if(wri_who==-1)
				{
					sma_flag=0;
					wri_num--;
					break;
				}
				cin>>wri_sco[wri_who][wri_num];
				if(wri_sco[wri_who][wri_num]==0)break;
				if(wri_sco[wri_who][wri_num]==-1)
				{
					sma_flag=0;
					wri_num--;
					break;
				}
				hash[wri_who]=1;
			}
			if(sma_flag==0)continue;
			for (int i=1;i<=stu_num;i++)
			{
				if(hash[i]==0)
				{
					cout<<stu_name[i]<<"尚未登分,请输入他的分数,-1为取消输入(以缺考处理)";
					cin>>wri_sco[i][wri_num];
					cout<<endl;
				}
			}
			cout<<"录入完毕!"<<endl;
			fclose(stdin);fclose(stdout);
			sma_flag=0;
			print_data();
		}
		if(orders==3)
		{
			freopen("CON","r",stdin);
			freopen("CON","w",stdout);
			cout<<"请顺次输入默写(考试)序号,学生学号以及更改分数(0退出)"<<endl;
			int wri_x,wri_sn,new_sco;
			sma_flag=1;
			while(sma_flag==1)
			{
				cin>>wri_x;
				if(wri_x==0)break;
				cin>>wri_sn>>new_sco;
				wri_sco[wri_sn][wri_x]=new_sco;
			}
			sma_flag=0;
			fclose(stdin);fclose(stdout);
			print_data();
		} 
		if(orders==4)
		{
			freopen("CON","r",stdin);
			freopen("CON","w",stdout);
			mis_num++;
			cout<<"请输入任务名称(-1取消)";
			cin>>mis_name[mis_num];
			if(mis_name[mis_num]=="-1")continue;
			cout<<"请输入截止时间(即多少天后截止,-1取消):";
			cin>>mis_app[mis_num];
			mis_date[mis_num]=nowdate;
			cout<<"请顺次输入学号及完成情况(1:不加分,2:加一分,0:结束输入,-1:取消"<<endl;
			sma_flag=1;
			while(sma_flag==1)
			{
				int mis_stu_num,mis_now_sco;
				cin>>mis_stu_num;
				if(mis_stu_num==0){sma_flag=0;continue;}
				if(mis_stu_num==-1){sma_flag=-1;mis_num--;continue;}
				cin>>mis_now_sco;
				if(mis_now_sco==0){sma_flag=0;continue;}
				if(mis_now_sco==-1){sma_flag=-1;mis_num--;continue;}
				mis_hash[mis_num][mis_stu_num]=mis_now_sco;
				if(mis_now_sco==2)
				{
					mis_hash[mis_num][mis_stu_num]=1;
					nor_sco_add(1,mis_stu_num);
				}
			}
			if(sma_flag==-1)continue;
			for (int i=1;i<=stu_num;i++)if(stu_name[i]=="-")mis_hash[mis_num][i]=1;
			fclose(stdin);
			fclose(stdout);
			check_mis;
		} 
		if(orders==5)
		{
			freopen("CON","r",stdin);
			freopen("CON","w",stdout);
			int mis_knum;
			cout<<"请输入要删除的任务(0取消)";
			cin>>mis_knum;
			if(mis_knum==0)continue;
			for (int i=1;i<=stu_num;i++)mis_hash[mis_knum][i]=1;
			fclose(stdin);
			fclose(stdout);
			check_mis();
		}
		if(orders==6)
		{
			int mis_knum,mis_newapps;
			freopen("CON","r",stdin);
			freopen("CON","w",stdout);
			cout<<"请输入要更改的任务(0取消)";
			cin>>mis_knum;
			if(mis_knum==0)continue;
			cout<<"请输入从今天起多少天后截止(0取消)";
			cin>>mis_newapps;
			if(mis_newapps==0)continue;
			mis_date[mis_knum]=nowdate;
			mis_app[mis_knum]=mis_newapps;
			fclose(stdin);fclose(stdout);
			check_mis();
		}
		if(orders==7)
		{
			int mis_knum,mis_newstu_num;
			freopen("CON","r",stdin);
			freopen("CON","w",stdout);
			cout<<"请顺次输入任务序号和学生学号(0退出)";
			sma_flag=1;
			while (sma_flag==1)
			{
				cin>>mis_knum;
				if(mis_knum==0)break;
				cin>>mis_newstu_num;
				if(mis_newstu_num==0)break;
				mis_hash[mis_knum][mis_newstu_num]=1;
			}
			fclose(stdin);fclose(stdout);
			check_mis();
		}
	}
	freopen("CON","w",stdout);
	cout<<"goodbye!(程序将于5秒后自行退出)"<<endl;
	Sleep(5000);
	return 0;
}

这是主程序

#include <bits/stdc++.h>
using namespace std;
int n,p,m=INT_MIN;
string str[110];
int main()
{
	cout<<"请先输入要录入的学生个数,后再输入学号(如:1910101)和姓名(如:张三),每一条数据用空格隔开"<<endl;
	cin>>n;
	freopen("data.data","w",stdout);
	for (int i=1;i<=n;i++)
	{
		cin>>p;
		p=p%10+p/10%10*10;
		cin>>str[p];
		m=max(m,p);
		if(str[p][0]=='*')
		{
			string st1="";
			for (int j=1;j<str[p].size();j++)st1+=str[p][j];
			str[p]=st1;
		}
	}
	cout<<m<<endl;
	for (int i=1;i<=m;i++)
	{
		if(str[i]=="")str[i]="-";
		cout<<str[i]<<endl;
	}
	cout<<0<<endl;
	for (int i=1;i<=m;i++)
	{
		if(str[i]=="-")cout<<endl;
		else
		{
			cout<<0<<endl;
		}
	}
	cout<<0<<endl;
	return 0;
}

这是名单修改器
请各位大佬们帮忙诊断诊断,小菜鸡万分感谢!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值