结构体作业
1.定义一个acmer结构体,包括以下信息:姓名,学号,手机号,做题数,出生日期,其中出生日期date也是一个结构体,包括年、月、日
2.建立结构体数组,实现对多个同学的信息输入,输出
3.实现简单的统计功能,比如统计做题数大于150的同学并输出其完整信息
4.实现查找功能,包括按姓名、学号查找
5.实现信息修改功能
6.按做题数目进行排序(选作)
7.其他功能可以自由扩展,多多益善 ^_^
8.程序一个函数实现一个功能
2.建立结构体数组,实现对多个同学的信息输入,输出
3.实现简单的统计功能,比如统计做题数大于150的同学并输出其完整信息
4.实现查找功能,包括按姓名、学号查找
5.实现信息修改功能
6.按做题数目进行排序(选作)
7.其他功能可以自由扩展,多多益善 ^_^
8.程序一个函数实现一个功能
【code】
1 /*2012年2月9日—by秦川*/
2 #include<stdio.h>
3 #include<stdlib.h>
4 #include<string.h>
5 #define M 50
6 struct date
7 {
8 int year;
9 int month;
10 int day;
11 };
12 typedef struct
13 {
14 char name[20];
15 char num[11];
16 char tele[11];
17 int solve;
18 struct date birth;
19 }acmer;
20 int enter(acmer t[]);//输入记录
21 void list(acmer t[],int n);//显示记录
22 void search1(acmer t[],int n);//按姓名查找显示
23 void search2(acmer t[],int n);//按学号查找显示
24 void update(acmer t[],int n);//修改记录
25 int find1(acmer t[],int n,char*s);//查找姓名函数
26 int find2(acmer t[],int n,char*s);//查找学号函数
27 void tongji(acmer t[],int n);//统计做题数函数
28 void sort(acmer t[],int n);//降序排序函数
29 int add(acmer t[],int n);//插入记录函数,参数为结构体数组和记录数
30 int Delete(acmer t[],int n);//删除函数,参数为记录数组和记录条数
31 int menu_select();//主菜单函数
32 //主函数开始
33 void main()
34 {
35 int length;
36 acmer adr[M];
37 system("cls");//清屏
38 for(;;)
39 {
40 switch (menu_select())
41 {
42 case 1:length=enter(adr);break;
43 case 2:list(adr,length);break;
44 case 3:update(adr,length);break;
45 case 4:search1(adr,length);break;
46 case 5:search2(adr,length);break;
47 case 6:tongji(adr,length);break;
48 case 7:sort(adr,length);break;
49 case 8:length=Delete(adr,length);break;
50 case 9:length=add(adr,length);break;
51 case 0:exit(0);
52 }
53 }
54 }
55 //菜单函数,菜单返回值为整数,代表所选的菜单项
56 int menu_select()
57 {
58 int c;
59 printf("********************菜单********************\n\n");
60 printf("1. 输入记录\n");
61 printf("2. 显示记录\n");
62 printf("3. 修改记录\n");
63 printf("4. 按姓名查找记录\n");
64 printf("5. 按学号查找记录\n");
65 printf("6. 统计记录\n");
66 printf("7. 按做题数降序排序\n");
67 printf("8. 删除记录\n");
68 printf("9. 插入记录\n");
69 printf("0. 退出程序\n\n");
70 printf("********************************************\n");
71 do
72 {
73 printf("请选择:");
74 scanf("%d",&c);
75 }while(c<0||c>9);
76 return c;
77 }
78 //输入记录,形参为结构体数组,函数值返回类型为整型表示记录长度
79 int enter(acmer t[])
80 {
81 int i,n;
82 system("cls");
83 printf("\n请输入您要输入的数据组数\n");
84 scanf("%d",&n);
85 printf("请输入记录\n");
86 printf("姓名 学号 电话 做题数 生日(年 月 日)\n");
87 printf("----------------------------------------------------\n");
88 for(i=0;i<n;i++)
89 {
90 scanf("%s %s %s %d %d %d %d",t[i].name,t[i].num,t[i].tele,&t[i].solve,&t[i].birth.year,&t[i].birth.month,&t[i].birth.day);
91 printf("----------------------------------------------------\n");
92 }
93 return n;
94 }
95 void list(acmer t[],int n)
96 {
97 int i;
98 system("cls");
99 printf("\n\n********************************************\n");
100 printf("姓名 学号 电话 做题数 生日\n");
101 printf("--------------------------------------------\n");
102 for(i=0;i<n;i++)
103 {
104 printf("%s %s %s %d %d %d %d",t[i].name,t[i].num,t[i].tele,t[i].solve,t[i].birth.year,t[i].birth.month,t[i].birth.day);
105 printf("\n");
106 }
107 printf("*********************结束*********************\n");
108 }
109 void update(acmer t[],int n)
110 {
111 char s[20];
112 int i;
113 printf("请输入要修改的姓名\n");
114 scanf("%s",s);
115 i=find1(t,n,s);
116 printf("请输入更改后的信息\n");
117 printf("姓名 学号 电话 做题数 生日(年 月 日)\n");
118 printf("----------------------------------------------------\n");
119 scanf("%s %s %s %d %d %d %d",t[i].name,t[i].num,t[i].tele,&t[i].solve,&t[i].birth.year,&t[i].birth.month,&t[i].birth.day);
120 }
121 //按姓名查找记录
122 void search1(acmer t[],int n)
123 {
124 char s[20];
125 int i;
126 system("cls");
127 printf("请输入姓名\n");
128 scanf("%s",s);
129 i=find1(t,n,s);
130 if(i>n-1)
131 printf("没找到。。\n");
132 else
133 printf("%s %s %s %d %d %d %d\n",t[i].name,t[i].num,t[i].tele,t[i].solve,t[i].birth.year,t[i].birth.month,t[i].birth.day);
134 }
135 //按学号查找记录
136 void search2(acmer t[],int n)
137 {
138 char s[20];
139 int i;
140 system("cls");
141 printf("请输入学号\n");
142 scanf("%s",s);
143 i=find2(t,n,s);
144 if(i>n-1)
145 puts("没找到。。");
146 else
147 printf("%s %s %s %d %d %d %d\n",t[i].name,t[i].num,t[i].tele,t[i].solve,t[i].birth.year,t[i].birth.month,t[i].birth.day);
148 }
149 void tongji(acmer t[],int n)
150 {
151 int i,s,l=0;
152 printf("请输入要统计的最小做题数:\n");
153 scanf("%d",&s);
154 printf("姓名 学号 电话 做题数 生日\n");
155 printf("----------------------------------------------------\n");
156 for(i=0;i<s;i++)
157 {
158 if(atoi(t[i].num)>=s)
159 {
160 printf("%s %s %s %d %d %d %d\n",t[i].name,t[i].num,t[i].tele,t[i].solve,t[i].birth.year,t[i].birth.month,t[i].birth.day);
161 printf("----------------------------------------------------\n");
162 l++;
163 }
164 }
165 if(l==0) puts("没找到。。");
166 printf("*********************结束*********************\n");
167 }
168 //查找函数,参数为记录数组,记录条数,以及姓名
169 int find1(acmer t[],int n,char *s)
170 {
171 int i;
172 for(i=0;i<n;i++)
173 {
174 if(strcmp(s,t[i].name)==0)
175 return i;
176 }
177 return i;
178 }
179 //查找函数,参数为记录数组,记录条数,以及学号
180 int find2(acmer t[],int n,char *s)
181 {
182 int i;
183 for(i=0;i<n;i++)
184 {
185 if(strcmp(s,t[i].num)==0)
186 return i;
187 }
188 return i;
189 }
190 //降序排序函数,参数为结构体数组和记录数
191 void sort(acmer t[],int n)
192 {
193 int i,j,flag;
194 acmer temp;
195 for(i=0;i<n;i++)
196 {
197 flag=0;
198 for(j=0;j<n-1;j++)
199 if(t[j].solve<t[j+1].solve)
200 {
201 flag=1;
202 strcpy(temp.name,t[i].name);
203 strcpy(temp.num,t[i].num);
204 strcpy(temp.tele,t[i].tele);
205 temp.solve=t[i].solve;
206 temp.birth.year=t[i].birth.year;
207 temp.birth.month=t[i].birth.month;
208 temp.birth.day=t[i].birth.day;
209 strcpy(t[i].name,t[j].name);
210 strcpy(t[i].num,t[j].num);
211 strcpy(t[i].tele,t[j].tele);
212 t[i].solve=t[j].solve;
213 t[i].birth.year=t[j].birth.year;
214 t[i].birth.month=t[j].birth.month;
215 t[i].birth.day=t[j].birth.day;
216 strcpy(t[j].name,temp.name);
217 strcpy(t[j].num,temp.num);
218 strcpy(t[j].tele,temp.tele);
219 t[j].solve=temp.solve;
220 t[j].birth.year=temp.birth.year;
221 t[j].birth.month=temp.birth.month;
222 t[j].birth.day=temp.birth.day;
223 }
224 if(flag==0)break;
225 }
226 system("cls");
227 printf("排序成功\n");
228 }
229 //插入记录函数,参数为结构体数组和记录数
230 int add(acmer t[],int n)
231 {
232 system("cls");
233 acmer temp;
234 int i,j;
235 char s[20];
236 printf("请输入记录\n");
237 printf("****************************************************\n");
238 printf("姓名 学号 电话 做题数 生日(年 月 日)\n");
239 printf("----------------------------------------------------\n");
240 scanf("%s %s %s %d %d %d %d",temp.name,temp.num,temp.tele,&temp.solve,&temp.birth.year,&temp.birth.month,&temp.birth.day);
241 printf("----------------------------------------------------\n");
242 printf("请输入插入位置的姓名\n");
243 scanf("%s",s);
244 i=find1(t,n,s);
245 for(j=n-1;j>=i;j--)
246 {
247 strcpy(t[j+1].name,t[j].name);
248 strcpy(t[j+1].num,t[j].num);
249 strcpy(t[j+1].tele,t[j].tele);
250 t[j+1].solve=t[j].solve;
251 t[j+1].birth.year=t[j].birth.year;
252 t[j+1].birth.month=t[j].birth.month;
253 t[j+1].birth.day=t[j].birth.day;
254 }
255 strcpy(t[i].name,temp.name);
256 strcpy(t[i].num,temp.num);
257 strcpy(t[i].tele,temp.tele);
258 t[i].solve=temp.solve;
259 t[i].birth.year=temp.birth.year;
260 t[i].birth.month=temp.birth.month;
261 t[i].birth.day=temp.birth.day;
262 n++;
263 return n;
264 system("cls");
265 puts("插入成功!");
266 }
267 //删除函数,参数为记录数组和记录条数
268 int Delete(acmer t[],int n)
269 {
270 char s[20];
271 int ch=0;
272 int i,j;
273 system("cls");
274 printf("请输入要删除的姓名\n");
275 scanf("%s",s);
276 i=find1(t,n,s);
277 if(i>n-1)
278 printf("没找到。。\n");
279 else
280 {
281 printf("%s %s %s %d %d %d %d\n",t[i].name,t[i].num,t[i].tele,t[i].solve,t[i].birth.year,t[i].birth.month,t[i].birth.day);
282 printf("确定删除?请输入__(1为删除,0为取消)\n");
283 scanf("%d",&ch);
284 if(ch==1)
285 {
286 for(j=i+1;j<n;j++)
287 {
288 strcpy(t[j-1].name,t[j].name);
289 strcpy(t[j-1].num,t[j].num);
290 strcpy(t[j-1].tele,t[j].tele);
291 t[j-1].solve=t[j].solve;
292 t[j-1].birth.year=t[j].birth.year;
293 t[j-1].birth.month=t[j].birth.month;
294 t[j-1].birth.day=t[j].birth.day;
295 }
296 n--;
297 system("cls");
298 puts("成功删除!");
299 }
300 }
301 return n;
302 }