1. 程式人生 > >C語言—學生管理系統

C語言—學生管理系統

2018.11.14
將連結串列作為記憶體資料模型,將檔案作為資料庫,將終端作為互動介面。
讀檔案生成連結串列,修改連結串列寫入檔案。
1.初始化現有資料。
2.讀檔案生成連結串列。
3.操作連結串列(增、查、改、刪、排序)。
4.寫連結串列到檔案。
(Linux下vim編輯器)

  1 #include <stdio.h>                                        
  2 #include <stdlib.h>
  3 #include <string.h>
  4 typedef struct student
  5
{ 6 char name[100]; 7 char sex; 8 int age; 9 double score; 10 }Stu; 11 typedef struct stuList 12 { 13 Stu data; 14 struct stuList *next; 15 }Node; 16 void creList(Node*head,char *filePath) 17 { 18 FILE*pr=fopen(filePath,"r+"); 19 if(NULL==pr) 20 exit
(-1); 21 Node*cur=(Node*)malloc(sizeof(Node)); 22 if(NULL==cur) 23 exit(-1); 24 while(fread(&cur->data,sizeof(Stu),1,pr)) 25 { 26 cur->next=head->next; 27 head->next=cur; 28 cur=(Node*)malloc(sizeof(Node)); 29 } 30 free
(cur); 31 fclose(pr); 32 } 33 void initFile() 34 { 35 Stu s[3]= 36 { 37 {"wang",'x',21,99}, 38 {"zhao",'x',22,98}, 39 {"han",'y',23,100} 40 }; 41 FILE*pw=fopen("management.txt","w+"); 42 if(NULL==pw) 43 exit(-1); 44 fwrite(s,sizeof(s),1,pw); 45 fclose(pw); 46 } 47 48 void show(Node *head) 49 { 50 head=head->next; 51 while(head) 52 { 53 printf("\t%s\t%c\t%d\t%.2f\n",head->data.name,head ->data.sex,head->data.age,head->data.score); 54 head=head->next; 55 } 56 } 57 58 void addListStu(Node*head) 59 { 60 Node*cur=(Node *)malloc(sizeof(Node)); 61 if(NULL==cur) 62 exit(-1); 63 printf("name:\n"); 64 scanf("%s",cur->data.name); 65 getchar(); 66 printf("sex:\n"); 67 scanf("%c",&cur->data.sex); 68 printf("age:\n"); 69 scanf("%d",&cur->data.age); 70 printf("score:\n"); 71 scanf("%lf",&cur->data.score); 72 73 cur->next=head->next; 74 head->next=cur; 75 } 76 77 Node *searchListStu(Node *head) 78 { 79 char name[100]; 80 scanf("%s",name); 81 head=head->next; 82 while(head) 83 { 84 if(!strcmp(head->data.name,name)) 85 { 86 break; 87 } 88 head=head->next; 89 } 90 return head; 91 } 92 void deleteListStu(Node *head) 93 { 94 Node*phead=searchListStu(head); 95 if(phead->next==NULL) 96 { 97 while(head->next!=phead) 98 { 99 head=head->next; 100 } 101 head->next=phead->next; 102 free(phead); 103 phead=NULL; 104 } 105 else 106 { 107 Node*t=phead->next; 108 phead->data=phead->next->data; 109 phead->next=phead->next->next; 110 free(t); 111 } 112 } 113 int lenListStu(Node*head) 114 { 115 int len=0; 116 head=head->next; 117 while(head) 118 { 119 len++; 120 head=head->next; 121 } 122 return len; 123 } 124 void sortListStu(Node*head) 125 { 126 int len=lenListStu(head); 127 Node*prep,*p,*q,*t; 128 for(int i=0;i<len-1;i++) 129 { 130 prep=head; 131 p=prep->next; 132 q=p->next; 133 134 for(int j=0;j<len-1-i;j++) 135 { 136 if((p->data.score)<(q->data.score)) 137 { 138 prep->next=q; 139 p->next=q->next; 140 q->next=p; 141 142 t=p; 143 p=q; 144 q=t; 145 } 146 prep=prep->next; 147 p=p->next; 148 q=q->next; 149 } 150 } 151 } 152 void saveListStu(Node*head,char *fileName) 153 { 154 FILE*pr=fopen(fileName,"w+"); 155 if(NULL==pr) 156 exit(-1); 157 head=head->next; 158 while(head) 159 { 160 fwrite((&head->data),sizeof(Stu),1,pr); 161 head=head->next; 162 } 163 fclose(pr); 164 } 165 void freeList(Node*head) 166 { 167 Node *t=NULL; 168 head=head->next; 169 while(head) 170 { 171 t=head; 172 head=head->next; 173 free(t); 174 } 175 } 176 void modifyListStu(Node*head) 177 { 178 Node*phead=searchListStu(head); 179 printf("input score:\n"); 180 scanf("%lf",&phead->data.score); 181 } 182 int main() 183 { 184 Node*head=(Node*)malloc(sizeof(Node)); 185 if(NULL==head) 186 exit(-1); 187 head->next=NULL; 188 Node*phead; 189 190 initFile();//結構體初始化以及寫入 191 creList(head,"management.txt");//將檔案內容新增到連結串列 192 while(1) 193 { 194 printf("\t\tStudent Management!\n"); 195 printf("\tname\tsex\tage\tscore\n"); 196 show(head); 197 printf("1.add\t2.search\t3.delete\t4.modify\t5.sor t\t6.exit\n"); 198 199 int choice=0; 200 scanf("%d",&choice); 201 switch(choice) 202 { 203 case 1: 204 addListStu(head); 205 break; 206 case 2: 207 if(phead=searchListStu(head)) 208 { 209 printf("\t%s\t%c\t%d\t%.2f\n",phead->d ata.name,phead->data.sex,phead- >data.age,phead->data.score); 210 } 211 else 212 { 213 printf("NO peole!"); 214 } 215 break; 216 case 3: 217 deleteListStu(head); 218 break; 219 case 4: 220 modifyListStu(head); 221 break; 222 case 5: 223 sortListStu(head); 224 break; 225 case 6: 226 saveListStu(head,"management.txt"); 227 freeList(head); 228 return 0; 229 break; 230 default: 231 printf("輸入錯誤!\n"); 232 } 233 } 234 return 0; 235 } 在這裡插入程式碼片

1.