标签:
短学期大作业
主要实现
1.文件读入
2.文件内容删除
3.查询
4.排序
很简单 重点是链表操作的熟练 文件操作
1 #include "stdio.h" 2 #include "stdlib.h" 3 #include "string.h" 4 typedef struct st1 5 { 6 char stdNum[10]; 7 char name[10]; 8 char sex[10]; 9 char dorNum[10]; 10 char dorPhonenum[10]; 11 struct st1* next; 12 } StudentBaseMessage; //学生基本信息 13 14 typedef struct st2 15 { 16 char stdNum[10]; 17 char classNum[10]; 18 char className[10]; 19 int credit; 20 int gradesDay; 21 int gradesExper; 22 int gradesPaper; 23 int gradesALL; 24 float grades; 25 } StudentGradesMessage; //学生成绩 26 27 typedef struct st3 28 { 29 StudentGradesMessage st; 30 struct st3 *next; 31 } StudentGradesMessageLink;//学生基本信息链表 32 33 typedef struct st4 34 { 35 StudentBaseMessage st; 36 struct st4 *next; 37 } StudentBaseMessageLink; //学生成绩链表 38 39 float culGrades(int n,int credit); //计算成绩 40 //void input(StudentGradesMessageLink *head); 41 StudentGradesMessageLink *inputgrade(); //成绩读入 42 StudentBaseMessageLink *inputbase(); //基本信息读入 43 44 void search(char stunum[],StudentGradesMessageLink *head,StudentBaseMessageLink *head1); 45 void searhbase(char stunum[],StudentBaseMessageLink *head); 46 void sort(StudentGradesMessageLink *head); 47 void output(StudentGradesMessageLink *head); 48 void deleteA(StudentBaseMessageLink *head,char stdnum[]); 49 void deleteB(StudentGradesMessageLink *head,char stdnum[]); 50 51 int main() 52 { 53 StudentGradesMessageLink *headgrade=NULL; 54 StudentBaseMessageLink *headbase=NULL; 55 char stunum[10]; 56 char ch[10]; 57 int flag; 58 headgrade=inputgrade(); 59 headbase=inputbase(); 60 printf("1.查询学生基本情况\n2.查询成绩:\n3.成绩排序:\n4.删除学生信息\n"); 61 scanf("%d",&flag); 62 if(flag==3) 63 { 64 sort(headgrade); 65 output(headgrade); 66 return 0; 67 } 68 switch(flag) 69 { 70 case 1:printf("请输入你要查询的宿舍号:\n");break; 71 case 2:printf("请输入你要查询的学生学号:\n") ;break; 72 } 73 gets(ch); 74 gets(stunum); 75 if(flag==4) 76 { 77 deleteA(headbase,stunum); 78 deleteB(headgrade,stunum); 79 printf("删除成功!"); 80 return 0; 81 } 82 if(flag==2) 83 search(stunum,headgrade,headbase); 84 else 85 searhbase(stunum,headbase); 86 } 87 void deleteB(StudentGradesMessageLink *head,char stdnum[]) 88 { 89 StudentGradesMessageLink *p,*tail; 90 int flag=1; 91 p=head->next; 92 tail=head; 93 while(p) 94 { 95 if(p && strcmp(stdnum,p->st.stdNum)==0) 96 { 97 tail->next=tail->next->next; 98 flag=0; 99 } 100 p=p->next; 101 if(flag==1) 102 {tail=tail->next;} 103 else 104 flag=1; 105 106 } 107 FILE *fpb; 108 if((fpb=fopen("C:\\Users\\Administrator\\Desktop\\B.txt","w"))==NULL) 109 printf("文件打开错误!"); 110 p=head->next; 111 fprintf(fpb,"学号 课程编号 课程名称 学分 平时成绩 实验成绩 卷面成绩 综合成绩 实得学分\n"); 112 while(p) 113 { 114 fprintf(fpb,"%s %s %-10s %d %d %d %d\n", 115 p->st.stdNum,p->st.classNum,p->st.className,p->st.credit,p->st.gradesDay,p->st.gradesExper 116 ,p->st.gradesPaper); 117 p=p->next; 118 } 119 } 120 void deleteA(StudentBaseMessageLink *head,char stdnum[]) 121 { 122 StudentBaseMessageLink *p,*tail; 123 p=head->next; 124 tail=head; 125 while(p) 126 { 127 if(p && strcmp(stdnum,p->st.stdNum)==0) 128 { 129 tail->next=tail->next->next; 130 } 131 p=p->next; 132 tail=tail->next; 133 } 134 FILE *fpa; 135 if((fpa=fopen("C:\\Users\\Administrator\\Desktop\\A.txt","w"))==NULL) 136 printf("文件打开错误!"); 137 p=head->next; 138 fprintf(fpa,"学号 姓名 性别 宿舍号码 电话号码\n"); 139 while(p) 140 { 141 fprintf(fpa,"%s %s %s %s %s\n", 142 p->st.stdNum,p->st.name,p->st.sex,p->st.dorNum,p->st.dorPhonenum); 143 p=p->next; 144 } 145 } 146 void output(StudentGradesMessageLink *head) 147 { 148 StudentGradesMessageLink *s; 149 s=head->next; 150 while(s) 151 { 152 153 printf("课程编号:%s 课程名称:%-10s 综合成绩:%d 实得学分:%.2f\n" 154 ,s->st.classNum,s->st.className,s->st.gradesALL,s->st.grades); 155 s=s->next; 156 } 157 } 158 void sort(StudentGradesMessageLink *head) 159 { 160 StudentGradesMessageLink *s,*p,*q; 161 StudentGradesMessage temp; 162 p=head->next; 163 for(p=head->next;p;p=p->next) 164 { 165 for(q=p;q;q=q->next) 166 { 167 if(q->st.gradesALL>p->st.gradesALL) 168 { 169 temp=q->st; 170 p->st=q->st; 171 q->st=temp; 172 } 173 } 174 } 175 } 176 StudentBaseMessageLink *inputbase() 177 { 178 StudentBaseMessage sgm; 179 StudentBaseMessageLink *head=NULL; 180 StudentBaseMessageLink *s,*tail; 181 char ch[1024]; 182 FILE *fpa; 183 if((fpa=fopen("C:\\Users\\Administrator\\Desktop\\A.txt","r"))==NULL) 184 printf("文件打开错误!"); 185 fgets(ch,1024,fpa); 186 head=(StudentBaseMessageLink *)malloc(sizeof(StudentBaseMessageLink)); 187 tail=head; 188 while(!feof(fpa)) 189 { 190 191 s=(StudentBaseMessageLink*)malloc(sizeof(StudentBaseMessageLink)); 192 fscanf(fpa,"%s %s %s %s %s\n", 193 194 &sgm.stdNum,&sgm.name,&sgm.sex,&sgm.dorNum,&sgm.dorPhonenum); 195 196 s->st=sgm; 197 s->next=NULL; 198 tail->next=s; 199 tail=tail->next; 200 } 201 fclose(fpa); 202 return head; 203 } 204 void search(char stunum[],StudentGradesMessageLink *head,StudentBaseMessageLink *head1) 205 { 206 StudentGradesMessageLink *s; 207 StudentBaseMessageLink *t; 208 t=head1->next; 209 s=head->next; 210 int count=0; 211 float allcredit=0; 212 while(t) 213 { 214 if(strcmp(t->st.stdNum,stunum)==0) 215 break; 216 t=t->next; 217 } 218 printf("学 号:%s 姓 名: %s\n",stunum,t->st.name); 219 while(s) 220 { 221 if(strcmp(s->st.stdNum,stunum)==0) 222 { 223 printf("课程编号:%s 课程名称:%10s 综合成绩:%d 实得学分:%.2f\n" 224 ,s->st.classNum,s->st.className,s->st.gradesALL,s->st.grades); 225 count++; 226 allcredit+=s->st.grades; 227 } 228 s=s->next; 229 } 230 printf("共 修:%d科 实得总学分:%.2f\n",count,allcredit); 231 } 232 void searhbase(char stunum[],StudentBaseMessageLink *head) 233 { 234 StudentBaseMessageLink *s; 235 s=head->next; 236 while(s) 237 { 238 if(strcmp(s->st.dorNum,stunum)==0) 239 { 240 printf("姓名:%s 性别:%s 宿舍号码:%s 电话号码:%s\n" 241 ,s->st.name,s->st.sex,s->st.dorNum,s->st.dorPhonenum); 242 } 243 s=s->next; 244 } 245 } 246 StudentGradesMessageLink *inputgrade() 247 { 248 StudentGradesMessage sgm; 249 StudentGradesMessageLink *head=NULL; 250 StudentGradesMessageLink *s,*tail; 251 char ch[1024]; 252 char x[10]; 253 FILE *fpb; 254 if((fpb=fopen("C:\\Users\\Administrator\\Desktop\\B.txt","r"))==NULL) 255 printf("文件打开错误!"); 256 fgets(ch,1024,fpb); 257 head=(StudentGradesMessageLink *)malloc(sizeof(StudentGradesMessageLink)); 258 tail=head; 259 while(!feof(fpb)) 260 { 261 262 s=(StudentGradesMessageLink *)malloc(sizeof(StudentGradesMessageLink)); 263 264 fscanf(fpb,"%s %s %s %d %d %d %d\n", 265 sgm.stdNum,sgm.classNum,sgm.className,&sgm.credit,&sgm.gradesDay, 266 &sgm.gradesExper,&sgm.gradesPaper,&sgm.gradesALL,&sgm.grades); 267 if(sgm.gradesExper==-1) 268 sgm.gradesALL=sgm.gradesDay*0.3+sgm.gradesPaper*0.7; 269 else 270 sgm.gradesALL=sgm.gradesDay*0.15+sgm.gradesExper*0.15+sgm.gradesPaper*0.7; 271 sgm.grades=culGrades(sgm.gradesALL,sgm.credit); 272 s->st=sgm; 273 s->next=NULL; 274 tail->next=s; 275 tail=tail->next; 276 } 277 fclose(fpb); 278 return head; 279 } 280 281 float culGrades(int n,int credit) 282 { 283 float Grades; 284 switch(n/10) 285 { 286 case 10: 287 case 9:Grades=1.0*credit;break; 288 case 8:Grades=1.0*credit*0.8;break; 289 case 7:Grades=1.0*credit*0.75;break; 290 case 6:Grades=1.0*credit*0.6;break; 291 default:Grades=0; 292 } 293 return Grades; 294 }
标签:
原文地址:http://www.cnblogs.com/threezj/p/4643961.html