链表不会用
文件不会使
在这种情况下就边写边做
希望这个月能做完这个作业
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.增加学生信息*************************** "); 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("*******************增加信息成功*************************** "); 55 56 break; 57 case 11: 58 printf("*****************11.增加学生信息(头添加)****************** "); 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("*******************增加信息成功*************************** "); 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.显示所有的学生的信息******************* "); 88 showStu_data(); 89 printf("*******************信息显示成功*************************** "); 90 break; 91 case 0: 92 printf("*****************0.退出系统******************************* "); 93 run=0; 94 break; 95 case 10: 96 show_main();//调用 97 break; 98 default: 99 printf("*****************!.输入错误******************************* "); 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("*******************学生管理系统*************************** "); 115 printf("*******************系统功能如下*************************** "); 116 printf("*****************1.增加学生信息(尾添加)******************* "); 117 printf("*****************11.增加学生信息(头添加)****************** "); 118 printf("*****************111.增加学生信息(指定位置添加)*********** "); 119 printf("*****************2.查找指定的学生信息********************* "); 120 printf("*****************3.修改指定的学生信息********************* "); 121 printf("*****************4.保存业主的信息到文件中***************** "); 122 printf("*****************5.读取文件中的业主的信息***************** "); 123 printf("*****************6.删除指定的学生的信息******************* "); 124 printf("*****************7.恢复删除的学生的信息******************* "); 125 printf("*****************9.显示所有的学生的信息******************* "); 126 printf("*****************10.查看面板****************************** "); 127 printf("*****************0.退出系统******************************* "); 128 printf("********************************************************** "); 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 ",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 }