链表不会用

文件不会使

在这种情况下就边写边做

希望这个月能做完这个作业

 

 

 

  1 #include<stdio.h>
  2 #include<stdlib.h>
  3 #include<string.h>
  4 
  5 #define StuIdlen 12//学生学号长度 
  6 #define StuNamelen 12//学生姓名长度 
  7 typedef struct Stu
  8 {
  9     char StuName[StuNamelen];
 10     char StuId[StuIdlen];
 11     int score;
 12     struct Stu* pNext;//下一个指针 
 13 }Stu_data; //学生数据类型 
 14 //声明链表的头和尾
 15 Stu_data* g_pHead =NULL; 
 16 Stu_data* g_pEnd =NULL; //初始化0
 17 
 18  //清空列表
 19  void FreeLinkData();
 20  //打印数据
 21  void showStu_data();
 22  //链表头添加一个节点
 23  void HeadAddStu(    char *iStuName,char *iStuId,int iscore);//添加学生信息 
 24 //查找指定学生
 25 Stu_data* FindStu(char* iStuId);
 26 void insert();
 27 int main()
 28 {
 29     void show_main();//展示功能面板 声明 
 30     void AddStu(    char *iStuName,char *iStuId,int iscore);//添加学生信息     
 31     
 32     
 33     int chose;
 34     int run =1;//永真run 
 35     show_main();//调用 
 36     while(run)//永真执行操作 
 37     {
 38         scanf("%d",&chose); 
 39     switch(chose) 
 40     {
 41         case 1:
 42             printf("*****************1.增加学生信息***************************\n");
 43             char iStuName[StuNamelen];
 44             char iStuId[StuIdlen];
 45             int iscore;
 46             printf("输入学生姓名:");
 47             scanf("%s",iStuName); 
 48             getchar();
 49             printf("输入学生学号:");
 50             scanf("%s",iStuId); 
 51             printf("输入学生成绩:");
 52             scanf("%d",&iscore); 
 53             AddStu(iStuName,iStuId,iscore);
 54             printf("*******************增加信息成功***************************\n");
 55             
 56             break;
 57         case 11:
 58             printf("*****************11.增加学生信息(头添加)******************\n");
 59             /*char iStuName[StuNamelen];
 60             char iStuId[StuIdlen];
 61             int iscore;
 62             */
 63             printf("输入学生姓名:");
 64             scanf("%s",iStuName); 
 65             getchar();
 66             printf("输入学生学号:");
 67             scanf("%s",iStuId); 
 68             printf("输入学生成绩:");
 69             scanf("%d",&iscore); 
 70             HeadAddStu(iStuName,iStuId,iscore);
 71             printf("*******************增加信息成功***************************\n");
 72             //头添加 
 73             break;
 74         case 111:
 75             {
 76         
 77             Stu_data* pTemp =NULL;
 78             printf("输入指定学号");
 79             scanf("%s",iStuId);
 80             pTemp=FindStu(iStuId);
 81             if(NULL==pTemp)
 82             {
 83                 
 84             }
 85             }
 86         case 9:
 87             printf("*****************9.显示所有的学生的信息*******************\n");
 88             showStu_data();
 89             printf("*******************信息显示成功***************************\n");
 90             break;
 91         case 0:
 92             printf("*****************0.退出系统*******************************\n");
 93             run=0;
 94             break; 
 95         case 10:
 96             show_main();//调用     
 97             break; 
 98         default:
 99             printf("*****************!.输入错误*******************************\n");
100             break; 
101     } 
102         
103         
104     }
105     FreeLinkData();    
106     system("PAUSE");
107     return 0;
108 }
109 
110 
111 
112 void show_main()//展示功能面板 定义 
113 {
114     printf("*******************学生管理系统***************************\n");
115     printf("*******************系统功能如下***************************\n");
116     printf("*****************1.增加学生信息(尾添加)*******************\n");
117     printf("*****************11.增加学生信息(头添加)******************\n");    
118     printf("*****************111.增加学生信息(指定位置添加)***********\n");
119     printf("*****************2.查找指定的学生信息*********************\n");
120     printf("*****************3.修改指定的学生信息*********************\n");
121     printf("*****************4.保存业主的信息到文件中*****************\n");
122     printf("*****************5.读取文件中的业主的信息*****************\n");
123     printf("*****************6.删除指定的学生的信息*******************\n");
124     printf("*****************7.恢复删除的学生的信息*******************\n");
125     printf("*****************9.显示所有的学生的信息*******************\n");
126     printf("*****************10.查看面板******************************\n");
127     printf("*****************0.退出系统*******************************\n");
128     printf("**********************************************************\n");
129     
130 }
131 void AddStu(char *iStuName,char *iStuId,int iscore)
132 {
133     
134     //检验合法性质
135     if(NULL == iStuName||NULL == iStuId||iscore<0)
136     {
137         printf("输入学生信息错误");
138         return ; 
139     } 
140     //逻辑判断-
141     //创建一个节点
142      
143     Stu_data* pTemp=malloc(sizeof(Stu_data)); 
144     //节点成员附初始值
145     strcpy(pTemp->StuName,iStuName); 
146     strcpy(pTemp->StuId,iStuId);
147 
148     
149     pTemp->score=iscore;
150     pTemp->pNext=NULL; 
151     // 接在链表上
152     if(g_pHead==NULL||g_pEnd==NULL) 
153     {
154         g_pHead =pTemp;//link
155         g_pEnd =pTemp;//向后移动 
156     }
157     else
158     {
159         g_pEnd->pNext = pTemp;
160         g_pEnd=pTemp; 
161     } 
162     
163 }
164 void FreeLinkData() //清空列表
165  {
166      Stu_data* pTemp = g_pHead;//记录节点 
167      while(g_pHead !=NULL)
168      {
169          g_pHead=g_pHead->pNext;//向后移动了一个 
170          
171          free(pTemp);//删除节点 
172          
173      } 
174  }
175 void showStu_data()//展示链表 showStu_data();
176   {
177       Stu_data* pTemp = g_pHead;
178       while(pTemp != NULL)
179      {    
180          printf("学号:%s,姓名:%s,分数:%d\n",pTemp->StuName,pTemp->StuId,pTemp->score);
181          pTemp=pTemp->pNext;//向后移动了一个 
182      } 
183   }
184   //链表头添加一个节点
185  void HeadAddStu(    char *iStuName,char *iStuId,int iscore)//添加学生信息  
186  {
187      //检测合法性
188      if(NULL == iStuName||NULL == iStuId||iscore < 0) 
189      {
190          printf("学生信息输入错误");
191          return ; 
192      }
193      //创建一个节点
194      Stu_data* pTemp = malloc(sizeof(Stu_data));
195      //成员赋值
196      strcpy(pTemp->StuName,iStuName);
197      strcpy(pTemp->StuId,iStuId); 
198      pTemp->score = iscore;
199      pTemp->pNext = NULL;
200      if(NULL == g_pHead||NULL == g_pEnd)
201      {//链表为空
202          g_pHead = pTemp;
203         g_pEnd =pTemp; 
204          
205      }
206      else
207      {
208          //新节点的下一个指向头先连后断 
209          pTemp->pNext = g_pHead;
210         g_pHead=pTemp; 
211      }
212   } 
213 //查找指定学生
214 Stu_data* FindStu(char* iStuId)//201801013 12356 
215 {
216     //检测参数合法性
217     if(NULL == iStuId)
218     {
219         printf("学号输入错误");
220         return NULL; 
221     } 
222     //遍历链表
223     Stu_data* pTemp=g_pHead; 
224     while(pTemp)
225     {
226         if(0==strcmp(pTemp->StuId,iStuId))
227         {
228             return pTemp;
229         }
230         pTemp=pTemp->pNext;
231     }
232     printf("查无此节点");
233     return NULL;
234 }