码迷,mamicode.com
首页 > 编程语言 > 详细

命令控制台学生管理系统 c语言链表实现

时间:2015-07-13 22:16:27      阅读:238      评论:0      收藏:0      [点我收藏+]

标签:

短学期大作业

主要实现

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 }

 

命令控制台学生管理系统 c语言链表实现

标签:

原文地址:http://www.cnblogs.com/threezj/p/4643961.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!