前言
历时三天独立完成,特此记录。
功能
代码简单实现了以下几个功能:
1.师生账号系统及完善的账号管理机制
2.便捷的数据统计
3.作业布置及提交系统
4.验证码及格式检查机制
涉及的知识:
1.比较主要的是文件,目录的读写,笔者编写过程中有很多非常有意思的bug和知识点
2.一些字符串的操作
3.结构体的相关知识
运行代码的注意事项:
1.保证环境内有以下七个库函数,否则会一片飘红,煞是好看(乐)
#include<stdio.h>
#include<stdbool.h>
#include <stdlib.h>
#include<string.h>
#include<time.h>
#include <unistd.h>
#include <dirent.h>
2.确保文件具有可读写权限,代码会自动创建文件夹及对应txt文本用于存放数据。
3.确保存放代码可执行文件的文件夹内没有同名文件”homework“__"homework_list"__"codelist.txt"__"memdata"
关于代码的不足:
1,代码中使用了一些goto语句,笔者没有想到更好的方式替代,就先这么用着吧。。
2,代码为检查格式,将scanf语句用以下形式打印:
while(scanf("%d",&input)!=1){
printf("格式错误!\n>>");
while (getchar() != '\n');
}
好处是可以便捷的检查所有输入的格式问题,坏处是没有封装成函数,看上去很杂乱。
3,虽然代码已经可以正常运行,但是一些细节仍需优化,比如个人的数据库利用仍未完善
代码:
下面是整体的C语言代码实现:
#include<stdio.h>
#include<stdbool.h>
#include <stdlib.h>
#include<string.h>
#include<time.h>
#include <unistd.h>
#include <dirent.h>
/*
打开模式:r 以只读的方式打开,文件不存在就失败
w 以只写的方式打开,文件不存在就创建一个
w+ 可读可写,如果文件存在则清空文件,不存在就创建
读写字符:fgetc fputc
读写字符串:fgets fputs
EOF:文件的结束标记,读取字符时判断是否读完
feof():判断文件是否结束的函数
rewind(TEXT *name)移动位置指针到开头
fseek(fp, 0, SEEK_END);//将文件指针移到末尾
if (fp==NULL){
perror("open file falled:");//输出报错
return;
}
*/
struct member{
int identity=-1;
char user_name[100]={'\0'};
char myscode[100]={'\0'};
int class1=-1;
int age1=-1;
int stucode=-1;
};//存储个人信息
void createfile(char *a);//创建文件夹
int homework(int teacode);//布置作业
int homework_view(int stucode);//查看作业消息
char* yzcode();//生成验证码
void regist();//注册
int login();//登录
void print_file(int type,char *chan1,int chan2) ;//打印列表
int delete_change(int jud,int item,int stucode,char* filepath);/**1,判断是删除还是改写,
2,判断是哪一项(1,用户名,2,班级,3,年龄)
3,学号,找对应学生的档案行
4,更改的地方 **/
int main()
{
char file1[100]="memdata";
createfile(file1);//创建关于人员数据的文件夹
char file2[100]="homework_list";
createfile(file2);//创建教师信息文件夹
char file3[100]="homework";
createfile(file3);//存储作业文件
while(1){
START:
printf("-----------------------\n\
lets go!!\n\
欢迎来到学生管理系统!\n\
输入1 注册账户\n\
输入2 登录账户\n\
输入-1 退出程序\n\
-----------------------\n\
>>");
int a;
while(scanf("%d",&a)!=1){
printf("格式错误!\n>>");
while (getchar() != '\n');
}
switch(a){
case -1:
printf("byebye^_^");
return 0;
case 1:
regist();
break;
case 2:
int stucode;
stucode=login();
if (stucode==0) {
printf("登陆失败!\n");
}else if(stucode<0){//教师
while(1){
printf("输入:\n1 修改学生信息 \n2 布置作业 \n3 注销账号\n4 查看学生列表\n5 退出登录\n>>");
int cmd;
while(scanf("%d",&cmd)!=1){
printf("格式错误!\n>>");
while (getchar() != '\n');
}
char in1[100]={'\0'};
int in2=0;//这里是后面的打印函数参数
switch (cmd){
case 1:
int item;
int stucode1;
printf("请输入对应学生的学号:\n>>");
while(scanf("%d",&stucode1)!=1){
printf("格式错误!\n>>");
while (getchar() != '\n');
}
printf("请输入你要更改信息的对应序号(1,用户名,2,班级,3,年龄)\n>>");
while(scanf("%d",&item)!=1){
printf("格式错误!\n>>");
while (getchar() != '\n');
}
if (delete_change(1,item,stucode1,".\\codelist.txt")==1) printf("修改成功!\n");
else printf("修改失败!\n");
break;
case 2:
if(homework(stucode)==1) printf("布置成功!\n");
else printf("布置失败!放过孩子们吧www\n");
break;
case 3:
printf("你确定要注销吗?确定请输入:yes,输入no退出\n>>");
char cmddd[100];
ZHUXIAO1:
while(scanf("%s",&cmddd)!=1){
printf("格式错误!\n>>");
while (getchar() != '\n');
}
if(strcmp(cmddd,"yes")==0){
delete_change(0,0,stucode,".\\codelist.txt");
printf("注销成功\n");
}else if(strcmp(cmddd,"no")==0){
break;
}else{
printf("输入错误,请重新输入!\n>>");
goto ZHUXIAO1;
}
break;
case 4:
printf("请输入你想要的查找模式:\n1.通过用户名查找\n2.通过学号查找\n3.打印班级学生\n4.打印指定年龄学生\n5.打印全部学生\n>>");
int com_print;
while(scanf("%d",&com_print)!=1){
printf("格式错误!\n>>");
while (getchar() != '\n');
}
switch(com_print)
{
case 1:
printf("请输入要查找的用户名:\n>>");
while(scanf("%s",&in1)!=1){
printf("格式错误!\n>>");
while (getchar() != '\n');
}
break;
case 2:
printf("请输入要查找的学号:\n>>");
while(scanf("%d",&in2)!=1){
printf("格式错误!\n>>");
while (getchar() != '\n');
}
break;
case 3:
printf("请输入要打印的班级名:\n>>");
while(scanf("%d",&in2)!=1){
printf("格式错误!\n>>");
while (getchar() != '\n');
}
break;
case 4:
printf("请输入年龄:\n>>");
while(scanf("%d",&in2)!=1){
printf("格式错误!\n>>");
while (getchar() != '\n');
}
break;
case 5:
break;
}
print_file(com_print,in1,in2) ;
break;
case 5:
goto START;
}//教师操作界面
}//while(1)
}else{//学生
while(1){
printf("输入命令:\n1 修改个人信息 \n2 查看作业 \n3 注销账号\n4 退出账号\n>>");
int cmd;
scanf("%d",&cmd);
switch (cmd){
case 1:
int item;
printf("请输入你要更改的信息名(1,用户名,2,班级,3,年龄)\n>>");
while(scanf("%d",&item)!=1){
printf("格式错误!\n>>");
while (getchar() != '\n');
}
if (delete_change(1,item,stucode,".\\codelist.txt")==1)printf("修改成功!\n");
else printf("修改失败\n");
break;
case 2:
homework_view(stucode);
break;
case 3:
printf("你确定吗?确定请输入:yes,输入no退出\n>>");
char cmddd[100];
ZHUXIAO2:
while(scanf("%s",&cmddd)!=1){
printf("格式错误!\n>>");
while (getchar() != '\n');
}
if(strcmp(cmddd,"yes")==0){
if (delete_change(0,0,stucode,".\\codelist.txt")==1) printf("注销成功\n");
}else if(strcmp(cmddd,"no")==0){
break;
}else{
printf("输入错误,请重新输入!\n>>");
goto ZHUXIAO2;
}
case 4:
goto START;
}
}
}
break;
default:
printf("格式错误!\n");
return 0;
}//switch
}//循环
return 0;
}
char* yzcode(){
int srnum;
static char re[10];
srand(time(0));
int a=0;
for (int i=0;i<10;i++){
srnum=rand()%20+40;
if(srnum<=57&&srnum>=48){
re[a]=char(srnum);
a++;
}
re[a]='\0';
}
return re;
}
int delete_change(int jud,int item,int stucode,char* filepath){
FILE*fp=fopen(".\\temp.txt","w");
if (fp==NULL){
perror("open file falled:");
return 0;
}
FILE*fq=fopen(filepath,"a+");
if (fq==NULL){
perror("open file falled:");
return 0;
}
struct member stu;
while(!(fscanf(fq,"%d %s %s %d %d %d\n",&stu.identity,&stu.user_name,&stu.myscode,&stu.class1,&stu.age1,&stu.stucode)==EOF)){
if(stu.stucode==stucode){
if(jud==0){
continue;//判断是删除还是修改
}else if(jud==1) {//修改
switch(item){
case 1://用户名
printf("请输入新的用户名\n>>");
char username[100];
while(scanf("%s",&username)!=1){
printf("格式错误!\n>>");
while (getchar() != '\n');
}
fprintf(fp,"%d %s %s %d %d %d\n",stu.identity,username,stu.myscode,stu.class1,stu.age1,stu.stucode);
break;
case 2://班级
printf("请输入新的班级\n>>");
int class1;
while(scanf("%d",&class1)!=1){
printf("格式错误!\n>>");
while (getchar() != '\n');
}
fprintf(fp,"%d %s %s %d %d %d\n",stu.identity,stu.user_name,stu.myscode,class1,stu.age1,stu.stucode);
break;
case 3://年龄
printf("请输入新的年龄\n>>");
int age;
while(scanf("%d",&age)!=1){
printf("格式错误!\n>>");
while (getchar() != '\n');
}
fprintf(fp,"%d %s %s %d %d %d\n",stu.identity,stu.user_name,stu.myscode,stu.class1,age,stu.stucode);
break;
}
}
}else fprintf(fp,"%d %s %s %d %d %d\n",stu.identity,stu.user_name,stu.myscode,stu.class1,stu.age1,stu.stucode);
}
fclose(fq);
fclose(fp);
if(remove(filepath)!=0){
perror("remove");
return 0;
}
if (rename( ".\\temp.txt",filepath) != 0) {
perror("rename");
return 0;
}
return 1;
}
void createfile(char *a)
{
if(access(a,F_OK)!=0){
char command[100];
sprintf(command, "mkdir %s", a);
system(command);//创建具体存储数据的文件夹
}
}
void regist()
{
FILE*fp=fopen("./codelist.txt","a+");
if (fp==NULL){
perror("open file falled:");//输出报错
return ;
}
fseek(fp, 0, SEEK_END);//将文件指针移到末尾
// char user_name[100]={'\0'},myscode[100]={'\0'};
// int identity=-1,stucode=-1,class1=-1,age1=-1;
struct member stu;
printf("欢迎!学生请输入1,教师请输入2\n>>");
while(scanf("%d",&stu.identity)!=1){
printf("格式错误!\n>>");
while (getchar() != '\n');
}
if(stu.identity==1){
printf("请输入班级\n>>");
while(scanf("%d",&stu.class1)!=1){
printf("格式错误!\n>>");
while (getchar() != '\n');
}
printf("请输入年龄\n>>");
while(scanf("%d",&stu.age1)!=1){
printf("格式错误!\n>>");
while (getchar() != '\n');
}
}
printf("请输入学号(教职工号)\n>>");
while (scanf("%d",&stu.stucode)!=1){
printf("格式错误!\n>>");
while (getchar() != '\n');
}
if(stu.identity==2) stu.stucode=-stu.stucode;//区别教职工号和学号
Restartregist:
printf("请输入您的用户名\n>>");
while(scanf("%s",&stu.user_name)!=1){
printf("格式错误!\n>>");
while (getchar() != '\n');
}
int jud=0;
//这里判断是否重复
char filename[100]={'\0'};
char filename2[100]={'\0'};
char stucodde[100]={'\0'};
itoa(stu.stucode,stucodde,10);
if(jud==0){
jud++;
strcat(filename,".\\memdata\\");
strcat(filename,stu.user_name);
strcat(filename,".txt");
strcat(filename2,".\\memdata\\");
strcat(filename2,stucodde);
strcat(filename2,".txt");
}
if(access(filename,F_OK)==0){
printf("用户名已被注册,请重新输入!\n") ;
goto Restartregist;
}
Restartcode:
printf("请输入密码\n>>");
int i=0;
while(scanf("%s",&stu.myscode)!=1){
printf("格式错误!\n>>");
while (getchar() != '\n');
}
Rejustifycode:
printf("请再次输入密码\n>>");
char scode2[100];
while(scanf("%s",&scode2)!=1){
printf("格式错误!\n>>");
while (getchar() != '\n');
}
if(strcmp(scode2,"-1")==0) goto Restartcode;
if(strcmp(scode2,stu.myscode)!=0){
printf("密码错误!");
if(i!=0&&strcmp(scode2,"-1")!=0) printf("你可输入\"-1\"来重新设置密码\n");
i++;
goto Rejustifycode;
}
int a=fprintf(fp,"%d %s %s %d %d %d\n",stu.identity,stu.user_name,stu.myscode,stu.class1,stu.age1,stu.stucode);//ov
fclose(fp);
if(a){
printf("注册成功!\n");
FILE*fq=fopen(filename2,"w");
if (fq==NULL){
perror("open file falled:");//输出报错
fclose(fq);
return ;
}
fclose(fq);
}else{
printf("注册失败!\n");
}
}
int login()
{
char user_name[100],password[100];
char user_name1[100],password1[100];
/* while(scanf("%d",&stu.class1)!=1){
printf("格式错误!\n>>");
while (getchar() != '\n');
}*/
Login_begin1:
printf("请输入用户名:(输入‘1’退出程序)\n>>");
while(scanf("%s",&user_name)!=1){
printf("格式错误!\n>>");
while (getchar() != '\n');
}
if(!strcmp(user_name,"1")) return 0;
printf("请输入密码\n>>");
while(scanf("%s",&password)!=1){
printf("格式错误!\n>>");
while (getchar() != '\n');
}
char* yz_code1=yzcode();
printf("验证码为:%s\n请输入验证码\n>>",yz_code1);
char yz_code[10];
Login_begin2:
while(scanf("%s",&yz_code)!=1){
printf("格式错误!\n>>");
while (getchar() != '\n');
}
if(!strcmp(yz_code,yz_code1)){
printf("验证码正确!\n");
}else{
printf("输入错误!请重新输入:\n>>");
goto Login_begin2;
}
FILE*fp=fopen("./codelist.txt","r");
if (fp==NULL){
perror("open file falled:");//输出报错
return 0;
}
while(1){
struct member stu;
fscanf(fp,"%d %s %s %d %d %d\n",&stu.identity,&stu.user_name,&stu.myscode,&stu.class1,&stu.age1,&stu.stucode);
if(!strcmp(stu.user_name,user_name)&&!strcmp(stu.myscode,password)){
if (stu.identity==1)
printf("欢迎你,%s同学!\n",stu.user_name);
else{
printf("欢迎你,%s老师!\n",stu.user_name);
};
fclose(fp);
return stu.stucode;
}
if(feof(fp)){
printf("用户名或密码错误!");
goto Login_begin1;
}
}
}
void print_file(int type,char *chan1,int chan2)
{
FILE*fp=fopen(".\\codelist.txt","r");
if (fp==NULL){
perror("open file falled:");//输出报错
return;
}
struct member stu;
printf("请输入你想要的查找模式:\n1.通过用户名查找\n2.通过学号查找\n3.打印班级学生\n4.打印指定年龄学生\n5.打印全部学生\n6.打印老师名单\n>>");
int judge1=0;
int judge2=0;
int judge3=0;
int judge4=0;
int judge5=0;
int judge6=0;
switch(type){
case 1:
printf("\n");
while(!(fscanf(fp,"%d %s %s %d %d %d\n",&stu.identity,&stu.user_name,&stu.myscode,&stu.class1,&stu.age1,&stu.stucode)==EOF)){
if(!strcmp(stu.user_name,chan1)&&stu.identity==1){
printf("用户名:%s\n班级:%d\n年龄:%d\n学号:%d\n",stu.user_name,stu.class1,stu.age1,stu.stucode);
judge1++;
break;
}
}
if (judge1==0) printf("未找到指定文本qaq\n");
break;
case 2:
printf("\n");
while(!(fscanf(fp,"%d %s %s %d %d %d\n",&stu.identity,&stu.user_name,&stu.myscode,&stu.class1,&stu.age1,&stu.stucode)==EOF)){
if(chan2==stu.stucode){
printf("用户名:%s\n班级:%d\n年龄:%d\n学号:%d\n",stu.user_name,stu.class1,stu.age1,stu.stucode);
judge2++;
break;
}
}
if (judge2==0) printf("未找到指定文本qaq\n");
break;
case 3:
printf("\n");
while(!(fscanf(fp,"%d %s %s %d %d %d\n",&stu.identity,&stu.user_name,&stu.myscode,&stu.class1,&stu.age1,&stu.stucode)==EOF)){
if(chan2==stu.class1){
if(judge3==0) printf("用户名 年龄 学号\n");
judge3++;
printf("%s %d %d\n",stu.user_name,stu.age1,stu.stucode);
}
}
if (judge3==0) printf("未找到指定文本qaq\n");
break;
case 4:
printf("\n");
while(!(fscanf(fp,"%d %s %s %d %d %d\n",&stu.identity,&stu.user_name,&stu.myscode,&stu.class1,&stu.age1,&stu.stucode)==EOF)){
if(chan2==stu.age1){
if(judge4==0) printf("用户名 班级 学号\n");
judge3++;
printf("%s %d %d\n",stu.user_name,stu.class1,stu.stucode);
}
}
if (judge4==0) printf("未找到指定文本qaq\n");
break;
case 5:
printf("\n");
while(!(fscanf(fp,"%d %s %s %d %d %d\n",&stu.identity,&stu.user_name,&stu.myscode,&stu.class1,&stu.age1,&stu.stucode)==EOF)){
if(stu.identity==1){
if(judge5==0) printf("用户名 班级 年龄 学号\n");
judge5++;
printf("%s %d %d %d\n",stu.user_name,stu.class1,stu.age1,stu.stucode);
}
}
if (judge5==0) printf("什么都没有欸!qaq\n");
break;
case 6:
printf("\n");
while(!(fscanf(fp,"%d %s %s %d %d %d\n",&stu.identity,&stu.user_name,&stu.myscode,&stu.class1,&stu.age1,&stu.stucode)==EOF)){
if(stu.identity==2){
judge6++;
printf("%s\n",stu.user_name);
}
}
if (judge6==0) printf("什么都没有欸!qaq\n");
break;
}
printf("-------------------------------------------\n");
fclose(fp);
}
int homework(int teacode){
struct member stu2;
char teaname[100]={'\0'};
FILE*fpp=fopen(".\\codelist.txt","r");
if (fpp==NULL){
perror("open file falled:");
return 0;
}
while(!(fscanf(fpp,"%d %s %s %d %d %d\n",&stu2.identity,&stu2.user_name,&stu2.myscode,&stu2.class1,&stu2.age1,&stu2.stucode)==EOF)){
if(stu2.stucode==teacode) {
strcpy(teaname,stu2.user_name);
break;
}
}
fclose(fpp);
char homework[4096];
printf("请输入作业标题\n>>");
char title[100];
while(scanf("%s",&title)!=1){
printf("格式错误!\n>>");
while (getchar() != '\n');
}
char work_file[100]=".\\homework\\";
strcat(work_file,title);
strcat(work_file,"_.txt");
char work_list;
FILE*work=fopen(work_file,"a+");
printf("请输入作业内容(输入-1退出)\n>>");
char teach_name[100]="来自<";
strcat(teach_name,teaname);
strcat(teach_name,">老师的作业");
fprintf(work,"%s\n",teach_name);
while(1){
while (getchar() != '\n');
scanf("%[^\n]",&homework);
if(strcmp(homework,"-1")==0) break;
fprintf(work,"%s\n",homework);
}
fclose(work);
char worklist[4096]=".\\homework_list\\";
strcat(worklist,title);
strcat(worklist,"_worklist.txt");
FILE*work_list1=fopen(worklist,"a+");
if (work_list1==NULL){
perror("open file falled:");//输出报错
return 0;
}
FILE*fp=fopen(".\\codelist.txt","a+");
if (fp==NULL){
perror("open file falled:");//输出报错
return 0;
}
printf("向全部学生布置作业,输入1\n向指定班级布置作业,输入2\n向特定学生布置作业,输入3\n>>");
int cmd_work;
struct member stu;
int class2;
char work_name[100];
while(scanf("%d",&cmd_work)!=1){
printf("格式错误!\n>>");
while (getchar() != '\n');
}
switch(cmd_work){
case 1:
while(!(fscanf(fp,"%d %s %s %d %d %d\n",&stu.identity,&stu.user_name,&stu.myscode,&stu.class1,&stu.age1,&stu.stucode)==EOF)){
fprintf(work_list1,"%d\n",stu.stucode);
}
break;
case 2:
printf("请输入要布置作业的班级(多次输入 输入-1退出)\n>>");
while(1){
while(scanf("%d",&class2)!=1){
printf("格式错误!\n>>");
while (getchar() != '\n');
}
if(class2==-1) break;
while(!(fscanf(fp,"%d %s %s %d %d %d\n",&stu.identity,&stu.user_name,&stu.myscode,&stu.class1,&stu.age1,&stu.stucode)==EOF)){
if(stu.class1==class2) fprintf(work_list1,"%d\n",stu.stucode);
}
}
break;
case 3:
printf("请输入要布置作业的学生(多次输入 输入-1退出)\n>>");
while(1){
while(scanf("%s",&work_name)!=1){
printf("格式错误!\n>>");
while (getchar() != '\n');
}
if(strcmp("-1",work_name)==0) break;
while(!(fscanf(fp,"%d %s %s %d %d %d\n",&stu.identity,&stu.user_name,&stu.myscode,&stu.class1,&stu.age1,&stu.stucode)==EOF)){
if(strcmp(stu.user_name,work_name)==0) fprintf(work_list1,"%d\n",stu.stucode);
}
}
fclose(fp);
fclose(work_list1);
}
return 1;
}
int homework_view(int stucode){
int jud=0;
char zuoye[100][100];
struct dirent *entry;
DIR *dir;
dir = opendir(".\\homework_list");
if (dir == NULL) {
perror("opendir");
return 0;
}
while ((entry = readdir(dir)) != NULL) {//遍历所有名单
if((strcmp(entry->d_name,".")==0)||(strcmp(entry->d_name,"..")==0)) continue;
char fileNAME[100]=".\\homework_list\\";
strcat(fileNAME,entry->d_name);
FILE *file = fopen(fileNAME, "r");
if (file == NULL) {
perror("fopen1");
return 0;
}
int stucode2;
char workname[100]="-1";//为找到的作业名
while(fscanf(file,"%d\n", &stucode2)==1){
if (stucode2==stucode){
strncpy(workname,entry->d_name,strlen(entry->d_name)-12);//找作业名单里有没有自己
fclose(file);
break;
}
}
if (strcmp(workname,"-1")!=0) {//如果有自己,打开作业目录,寻找对应作业并打印
DIR*dir_work = opendir(".//homework");
if (dir_work == NULL) {
perror("opendir");
return 0;
}
struct dirent *entry_work;
while ((entry_work = readdir(dir_work)) != NULL) {//遍历作业文件夹下所有作业
if((strcmp(entry_work->d_name,".")==0)||(strcmp(entry_work->d_name,"..")==0)) continue;
if (strncmp(entry_work->d_name,workname,strlen(workname))==0){
char fileNAME2[100]=".\\homework\\";
strcat(fileNAME2,workname);
strcat(fileNAME2,".txt");
FILE *work = fopen(fileNAME2, "r");
if (work == NULL) {
break;
}
char text[4096];
printf("------------------------\n");
printf("%d.",jud+1) ;
while(fscanf(work,"%s\n",&text)!=EOF){
printf("%s\n",text);
}
strcpy(zuoye[jud],workname);
jud++;
fclose(work);
}
}
closedir(dir_work);
}
fclose(file);
}
closedir(dir);
if (jud==0) printf("骚年,你太幸运了,一个作业都没有哇!!\n");
else {
printf("---------------------------------------\n");
int cmd;
while(1){
printf("请输入你想提交的作业序号(输入-1退出)\n>>");
scanf("%d",&cmd);
if(cmd==-1) break;
char name[100]=".\\homework_list\\";
strcat(name,zuoye[cmd-1]);
strcat(name,"worklist.txt");
FILE*fp=fopen(name,"a+");
if (fp == NULL) {
perror("fopen");
return 0;
}
FILE*fq=fopen(".\\homework_list\\temp.txt","w");
if (fq==NULL){
perror("open file falled:");
return 0;
}
int tempcode;
while(fscanf(fp,"%d\n",&tempcode)!=EOF){
if(tempcode==stucode) continue;
fprintf(fq,"%d\n",tempcode);
}
fclose(fq);
fclose(fp);
if(remove(name)!=0){
perror("remove");
return 0;
}
if (rename( ".\\homework_list\\temp.txt",name) != 0) {
perror("rename");
return 0;
}
printf("提交成功!\n");
return 1;
}
}
return 1;
}
后记:
完成这个程序给我的最大感受:debug要有耐心。。
一个bug看三四个小时,真的很痛苦wwwwww
(晚上一点竟然不困,也是很神奇了)