|
- #include<stdio.h>: H/ ?( y, w' e+ ]) v1 N
- #include<stdlib.h>
, J" @4 y E: h# w7 p9 n3 S - #include<string.h>
: y/ }( g! O2 l( E( @ - #include<cstdio>/ a% o6 Y: ^2 x3 U
- #define N 2( k$ M1 ^+ g7 y( o1 j4 |' O# e8 N
- typedef struct Student //学生结构体类型定义 s: d% {+ T) c
- {. |2 o f- Z" m7 a
- int number;
/ D% n a0 L3 T7 ^ P+ N! Q% w - char name[10];8 |. p% w9 s, P7 B. Z' h
- int score;
# D3 M7 H4 @8 D, [% W, t& p - }Student;0 E+ n; n0 f! e/ m" O! a
) ~; g `7 D: U5 g4 w- char sign; //是否继续的标识符4 k' I% K: L8 I7 u
- char x[10]; //x用于清除多余的输入
& _8 n ?4 m; K! d" v) E: V* {* Y/ T - . P$ a% p7 c' `1 |8 y
- void Displaymenu()
' w! D) s$ g% _" u. r% B - {
! H, y' \+ @4 Z* o( o! o$ G; a" O - printf("****学生信息管理系统*****\n");
/ O4 L6 I6 G8 o0 d - printf("| 1. |\n");
9 o* D5 H/ z8 Z) o( C: u: T5 [ - printf("| 2.显示信息 |\n");
[( C5 }0 i' B - printf("| 3.查询信息 |\n");
- t1 C1 j$ @ O1 `1 Z& Z: ] - printf("| 4.删除信息 |\n");
8 Q0 X: |% S. B! X! x0 l+ A - printf("| 5.信息排序 |\n");) e/ Y3 |! T H! g# V/ Q
- printf("| 6.统计成绩 |\n");7 s8 U7 P, H" ]+ v5 z2 Z3 ]- F
- printf("| 7.读取文件 |\n");, x4 k% c# q# A! S* n2 ^
- printf("| 8.保存文件 |\n");, Q9 B0 u9 I& K3 k4 A# m, H4 i1 Y/ I, ^
- printf("| 0.退出系统 |\n");5 S1 `9 T: ?+ U: l6 `
- printf("*************************\n");
; \$ Q7 k; f7 c J. o: a9 R3 c - }
* d/ E. Q, x. i6 ~. u
1 n( t4 m; h+ Y4 `- void Input(Student stu[],int *n) //输入学生信息
+ N" p# S% l, g1 ^7 o - {
) N. U' ~% _" e+ a0 n! C9 o - do
+ O0 U7 d% e: d+ H& x! ?, i - {8 Y: M+ ]/ ^! I8 _7 q1 y8 X% y
- printf("请输入学生学号:");1 K7 ?% I/ ^- J5 _9 K, D
- scanf("%d",&stu[*n].number);% R* h7 x* f; y. k
- printf("请输入学生名字:");
0 |# |0 s6 L" ?7 @% V - scanf("%s",&stu[*n].name);( m" J6 O6 m; @: b s" E4 ~; |
- printf("请输入学生成绩:");+ ?/ d+ v+ x. v* d: @. |" a- h
- scanf("%d",&stu[*n].score);
, z2 x1 D- M, G& E: @ - (*n)++;$ T" b1 h1 _ _ h" \
- getchar();
7 i# u8 O( `7 h. A2 J - // gets(x); //清除多余的输入
) B3 w* A3 ]0 r t$ L3 D - printf("是否继续输入?(Y/N)");. P7 L1 O; D$ |: v
- scanf("%c",&sign);4 q( `' [- P3 u* D2 z
- }while(sign=='y'||sign=='Y');
}8 [% V5 p! }' L( B - }# L, n7 B$ T/ n7 Y% [
- ' J! ?2 y4 i @2 K5 T+ R
- void Display(Student stu[],int n) //显示学生信息9 ^) L% r0 Y0 z
- {
: }& ?* _( ?! B - int i;
3 a7 E, Q" }$ f' H' p! Z# K - if(n>0) //个数判断9 H( y8 t/ \' G3 V/ R! E* n2 c
- {$ \- G7 M' a; O4 t4 o- l5 ~* v! z
- printf("------------------------\n");8 D4 X% ]- T' z
- printf("学号 姓名 成绩\n");+ Q5 `) Q. ]* Y# r E/ X) w% N" H
- printf("------------------------\n");, Q, l8 O6 A8 @/ x7 s
- for(i=0;i<n;i++)7 s7 ]: k# _ Z) k5 {2 R* ?1 {
- printf("%-10d%-10s%d\n",stu[i].number,stu[i].name,stu[i].score);$ X( [1 f9 Q+ H$ p: I. R
- }
I: ?* G; Q/ Q' \ - else5 B# ^ i4 j/ j; m6 L# M" A$ W
- {* S& M( A* N* M7 p% v; |# N+ V
- printf("没有学生信息!\n");
. Z" ^* I. f; K" K M - }
) t4 g( Q E3 S4 w( D - system("pause");
' ~* v. y, K, p: [. Y1 O3 j - }
, F! I* c& ?" q - ) p" z8 {2 h Y# W W3 @
- void Query(Student stu[],int n) //查询学生信息% A1 g& g+ B8 m( W: `3 a: Q- S
- {
! Y1 m4 h2 Y& h/ E - int i;7 Y! t( L5 n- {* R/ a, j
- int number;
0 T1 Z- S7 Y* ]8 ~; @- ^2 H) z: O - do) k' E9 G1 l" [
- {& w# E# Y/ u! l3 w
- i=0;
- Z- ~1 t1 d2 S: X - // printf("请输入要查询的学生学号:");
+ G9 ~/ x/ R9 j7 c0 } - scanf("%d",&number);
& D1 v, ?' I$ b9 y% D9 V- {6 h - gets(x);
8 u. L+ s" U; B - while(stu[i].number!=number&&i<n)
- ^& k/ L$ u, `8 i/ W - i++;
- `% P! y+ o2 b6 g7 ? - if(i==n)
6 M% L$ A% _0 e" } - printf("未查询到信息!\n");
5 ?; L u7 K8 j, ^" Z6 \6 Q - else
, [& X9 j2 U% x, _/ P9 \& R% u - {
7 {# M, ~2 O9 |8 g( \ - printf("查询成功!\n");
$ e u# W1 y1 L5 |7 g - printf("学号为:%d\n",stu[i].number);( D3 G% T4 I2 V, o2 J
- printf("名字为:%s\n",stu[i].name);
* [6 z0 [' W* {: D: v - printf("成绩为:%d\n",stu[i].score);$ u! M$ r1 A2 Z* w; ?- p: x8 B
- }1 d, q+ z$ t! j+ ^
- printf("是否继续查询?(Y/N):");; j8 P! g$ B) V& y) E# X( [2 u
- scanf("%c",&sign);3 a" w# k3 n- y' G
- }while(sign=='y'||sign=='Y');
, }' ^( u4 s0 R3 l6 J8 t& p3 m. K - }
% @3 C: i/ M* i. B: e* \8 } - void Delect(Student stu[],int *n) //删除学生信息$ ^6 }: {: @' j; a- m* S& w. Z4 a
- {2 u1 j! j/ l0 H) @: N6 y2 u
- int number;
0 {' E* k! w7 a P' ~! y4 u - int i;
1 z2 J P; Z6 Q* e- c - char Delectsign; //删除确认标识符* w3 P0 \* j" Z& [/ U
- do
/ o( V. [: J/ L - {7 C% Z9 X% V- [( J9 S
- i=0;
9 a5 B' A% }9 H5 { - // printf("请输入您要删除的学生学号:");* Q- T) Y% r2 _* i' |$ I7 p
- scanf("%d",&number);
; D- v0 X e" T6 w6 O- h - gets(x);9 L# Y3 A9 a: x+ m
- while(stu[i].number!=number&&i<*n)
0 q, E7 K, K9 _9 S& l - i++;
5 {( x' q( v1 ]0 @$ b - if(i==*n)9 d1 K% x% R: Q7 Y
- printf("未查询到信息!\n");" }2 E" o) w& E1 Z. ^; r* X
- else/ y! {* }, q7 t1 d9 i7 Z- g% P' a
- {7 w3 @* x0 O6 }0 K, A' ]
- printf("查询成功!\n");1 f$ J& E; i+ d0 O, r1 ]. Y7 Z2 X
- printf("学号为:%d\n",stu[i].number);8 W0 C' ~. A) Z- |& H
- printf("名字为:%s\n",stu[i].name);2 |! a4 [( f A" b c
- printf("成绩为:%d\n",stu[i].score);' N" j. ?' [( ~1 n$ k5 z
- }+ R% e$ A! N0 `
- printf("是否删除?Y/N:");4 x3 A& b4 F; ~" Y3 r- ^% T; n( j2 x+ }
- scanf("%c",&Delectsign);
" `- t) z: w9 c - getchar();
6 ?2 O( V( u5 ~) i - if(Delectsign=='Y'||Delectsign=='y')
- _/ d G# f) O& ^ - {3 v- E1 u6 |( V, |6 k/ @4 S6 B
- /* for(j=i;j<*n-1;j++)
( S8 L" y4 v% D' m, l7 U - {
( U$ X. k2 H' R7 R9 h5 i; z, E& i& k - stu[j].number=stu[j+1].number;0 Y/ V7 q$ l2 `2 H4 I" V& r+ l
- strcpy(stu[j].name,stu[j+1].name);# d- d, a( O1 |; Q7 J
- stu[j].score=stu[j+1].score;+ _( K2 V; o* C4 C2 ~3 y( J
- }) r/ n* T$ E; W$ U6 I2 t! B* D- {
- */6 L) `! ^9 x9 X$ [, G$ h6 Z
- for(;i<*n;i++)% l4 q8 J1 k# i; f7 E# P# F
- stu[i]=stu[i+1];: | t. `3 y$ @% J
- (*n)--;9 d, i% d# b1 s& l- K9 ~$ V
- printf("删除成功!\n");& x6 c3 u F' D* h
- }
+ w5 k$ _! X2 u8 n - printf("是否继续删除?Y/N:");
/ W6 R' A S( K2 K4 v5 {6 J$ K - scanf("%c",&sign);
$ V p) H. A9 w0 @ ~/ o% P - gets(x);; O& u9 C2 X) k$ x. a
- }while(sign=='Y'||sign=='y');
; ~6 x( d/ ^* L' o- @ - }
, T' W# [; t( `
: F9 G; y) K+ w8 c# D1 N3 L- void Sort(Student stu[],int n) //按学号排序
) r1 n1 f' A O) m - {" K( Q6 v2 t9 ~; ~9 N3 g& n
- Student temp;
& {; L! G- G- `: _0 }# L+ g - int i,j;
) i3 `' i" M& P& @6 ] - for(i=0;i<n-1;i++)
7 e/ Y+ ~) E! a- j - {0 D2 S5 Y" g/ p, o) s! @5 ?, W
- for(j=i+1;j<n;j++)( D* Z7 g, E2 [) t% J, e7 x( x+ {3 l
- if(stu[i].number>stu[j].number)) P- `/ x/ q) e. \% M
- {8 i2 W j$ g1 T3 I
- temp=stu[i];; ]( o" J4 @0 W- P' m) n% S9 C
- stu[i]=stu[j];
. s0 K. E" Q& k* F2 f/ r - stu[j]=temp;
) m2 n: T, [" h - }# M7 N( u* `7 A" i
- }( d8 g% Y/ Q. J
- Display(stu,n);
4 M$ C! ^# [& C8 q* _ - // system("pause");9 t3 \& u* n* d9 z }% O
- }) k6 Q, z, {: c D4 U
- - R, X& U4 C% ^) [8 ~7 w9 {
- void Write(Student stu[],int n) //写入文件
0 Q& ~- r& J! n& P$ G" P/ ` - {. p+ o0 Q U1 j7 ~9 i% P i' a( }
- FILE *fp;
% d6 h+ E M3 X. ?* M. z8 Q+ | - int i;
: }4 a: z! r, ~. ] - // char fname[10];
/ U# y Z O% {2 h3 { - // strcpy(fname,"stu.txt");- {3 N/ e5 d3 L! K( [) Z' P# ?$ @
- // gets(fname);
) R5 l0 w% i: g! I. ?7 B& N3 D: H - // if((fp=fopen("fname","w"))==NULL)
, G2 ?' _# d/ k9 e3 P' T+ D2 a! s# k - if((fp=fopen("C:\\Users\\86131\\Desktop\\student.txt","w"))==NULL)$ q" S' Q9 N0 c$ m
- {
) a; d8 l$ i2 m9 ]) A1 `$ P - printf("打开失败!\n");. p$ L9 }) {* ~
- system("pause");; W! P- g# T4 Z1 H
- exit(0);
: p6 y4 |: u+ [ - }
' @2 y7 b9 k7 q' c - else
Y' q% s6 |- \- C! W: \% |4 o( a - {
- T4 X7 }- ] F - for(i=0;i<n;i++)
1 @1 j- N$ y0 H - {
: u( o- i/ w+ p6 l# D - fprintf(fp,"%-10d%-10s%d",stu[i].number,stu[i].name,stu[i].score); //原样输入
7 I0 C: h7 l, P& S: ~- C2 [ - fputs("\n",fp);' M; G7 I8 t5 c' z3 D% K" x7 `: \
- // if(fwrite(&stu[i],28,1,fp)!=1) //二进制输入) O$ U8 Q& }1 P v' K% H: f3 O
- // printf("写入错误!\n");5 S( U# g0 d4 U1 |
- }$ I+ X/ ^. D: i' k- T* n
- printf("保存成功!\n");7 T7 c) [) x3 B/ @+ B Y. z$ q9 C
- fclose(fp);
5 F( [7 q4 l2 D: \3 ^ - }
: }; |( n& g$ A7 g6 I, g" g) J- o - }
( C/ ?% ~. k9 a$ t0 d# [ - void Read(Student stu[],int *n) //读取文件, p4 Q! m+ X o8 H- T( l6 Z; o
- {
+ f; T; w$ W8 j3 j( O, ]* A - FILE *fp;' p" A4 S( _8 }2 J
- if((fp=fopen("C:\\Users\\86131\\Desktop\\student.txt","r"))==NULL)# q2 G7 }/ n+ M4 m
- {; E5 O% u2 n/ T$ g: V- I4 l' B [# C) s. i
- printf("打开失败!\n");
8 d' A0 I7 d0 S - exit (0);
& h, \9 |5 y0 ~3 M, T - }, }+ [+ G7 T. {! {- r+ Z8 d
- else% G+ y% g$ r$ a2 n
- {1 Y' J5 w, e" d: D
- while(!feof(fp))
* F) M: e& ]+ c( D" u - {* v5 a# h" |7 H Z6 Q8 X
- if(feof(fp)) break;( a# r/ A& Z9 q% p- |
- fscanf(fp,"%d%s%d",&stu[*n].number,stu[*n].name,&stu[*n].score);) l+ j- G" }8 w, g2 j6 m( g
- // if(feof(fp)) break;
# [; G: i" t" }+ n - printf("%-10d%-10s%d\n",stu[*n].number,stu[*n].name,stu[*n].score);9 M2 ]' p5 W+ _/ S" }2 y# G! _
- // if(feof(fp)) break;
) J) r b; }3 q, p0 C - (*n)++;
2 s" ~. H! o* E& i3 z A) ? - }) W6 M0 @: y5 }, ]
- printf("写入成功!\n");, t/ D( L# E C& O- ]
- }
# z9 q% V6 p( J. ^! @/ ^1 i - fclose(fp); N; o4 J e; i9 g
- }
( V; n9 A, B" N* O5 V0 N ^& S - ' _, q# d' Y" U6 _" O6 _1 r$ J
- void Calculate(Student stu[],int n) //求最高分,最低分,平均分5 J4 D8 x- ]( Z2 c
- {: O% ?" X6 Y) K! l5 Q; h
- int j;2 @( H5 e: h7 i7 \
- int MAXscore=0,M=0;
8 n# ~. a: t3 B! R - int MINscore=0,m=0;6 t# \) e S9 _4 H4 k4 z! T
- float sum=0;' \1 l1 {. Q+ Q& `' Q8 z
- float AVG=0.0;7 ?8 B1 B1 G; ]2 R; D+ T/ T
- for(j=0;j<=n;j++); D0 r6 L/ M5 q5 z
- {+ V: r2 E7 J4 r! ~- O
- sum=sum+stu[j].score;
* E* E" C3 I b1 U9 s7 | - if(stu[j].score>MAXscore), h! P4 a+ Y2 l/ [
- {
K1 S. j. z2 X1 O l ~! I5 p$ V - MAXscore=stu[j].score;# |" x) X! N7 Q: ~: @* s: F; F
- M=j;" c5 [& _" h. Q& Z1 [
- } ]4 j: \8 L2 w. ]! m' F1 l
- if(stu[j].score<MINscore)
6 n1 M5 e; z& ?5 h+ F - {( w9 r, U" i2 T/ k
- MINscore=stu[j].score;
M6 X2 R0 `- y9 R$ N - m=j;# D, X |( d5 G: f: V' I& z3 y& F
- }! D+ W4 o& u) F$ Y' Z
- }
; O U8 Z0 S3 T( t7 v3 O - AVG=(sum/n);0 E# b6 m) q, ^8 L
- printf("最高分为%d,学号为%d\n",stu[M].score,stu[M].number);/ E% f; Y4 o4 p o1 S
- printf("最低分为%d,学号为%d\n",stu[m].score,stu[m].number);) L8 w' o" E0 _/ S0 ~! ?
- printf("平均分为%5.2f\n",AVG);
" N5 e: K" i+ u; o0 s% N8 |$ {4 g! b - }
& e* `. p7 K# A4 B3 Z, w5 o
- G8 D9 D/ N1 h/ d b* C- int main() //主函数( @6 w& S* l/ W0 e
- {- r& s. ~) s; P/ o. M- V8 J
- Student stu[N]={0};3 O: K8 c! q: W# ?; d1 m7 K2 F
- int choice;
' v4 T0 {+ I( K5 d% x( t0 E - int n=0; //记录学生信息个数
* {2 @- L: k6 }3 q( z# d) a - do- ?$ l& J, I2 B) n1 l6 y1 y
- {
% U9 z2 L1 Z6 j1 g3 L) U% j ] r - Displaymenu(); //显示主菜单
1 d. c' n) I$ R+ v; ^ - printf("请输入您的选择(0-8):\n");
1 l) r8 O4 x7 F4 n$ b$ g& K - scanf("%d",&choice);4 k" r. H' }3 g8 S b
- if(choice>8||choice<0)3 d! y5 q" D+ c- F2 G7 H
- {
8 }8 |6 h$ e2 K/ `: [2 U6 X% E - printf("输入错误!\n");/ T2 _3 b& p4 L. B" N2 X @5 |
- }. N% Z; p' O% z$ A9 t3 ]9 p2 u, V6 s
- else1 }+ l9 m" q* K' r' T" |) z1 S# i
- {6 ~, K$ p, F) I% v/ R7 l4 J: {5 M
- switch(choice)
! R- H* e7 H$ r' o3 M+ V' c - {
7 P8 ~9 |- E3 `! H, f! j4 C# j$ a - case 1:
( Y; ?' `+ z4 O( z+ m2 s - printf("1.请输入学生信息:\n");
3 J4 g$ ~% i' w- \* Y& B7 | - Input(stu,&n); //输入学生信息 v& d; ]3 ?8 D) k: A
- break;7 V( l# U" n, D0 P, v9 c. V
- case 2:
# S5 q/ w- |9 [: A( X - printf("2.显示学生信息\n");! I$ @# D5 t9 M p
- Display(stu,n);
$ d2 n! W- e/ [8 }( S4 | - break;" d1 Y3 P' x) w- d ?; t1 j
- case 3:) U2 c0 Q! d% |7 H7 z5 ]" ?6 L: T
- printf("3.请输入要查询的学生学号:");
! u) t8 u( j# _+ e8 o - Query(stu,n); //查询学生信息. t$ U0 F1 ~# l
- break;
. K7 W+ h% Q# P& ]% m" l( O: x - case 4:6 B* f; r* K U6 [, _9 z
- printf("4.请输入您要删除的学生学号:");
- Y8 N; l- M) }/ S& A - Delect(stu,&n);
; f! d: L) M& K0 K7 V! h: I+ } - break;# L! b9 e! m1 O- `8 }* g
- case 5:- j5 q+ Q. F& ^9 [2 X2 Q
- printf("5.按学号升序结果如下:\n");* S6 P( K; x8 x: W/ x- p. I$ a5 _* C
- Sort(stu,n);
/ S3 u* C+ d7 e ]: Z - break;
$ k8 U9 V6 d& _! e3 z# b - case 6:6 y9 s, O; l% k% p" I( S& u1 y
- printf("6.统计成绩如下:\n");7 o% U! g' h0 W: y+ \3 @3 i# r2 M
- Calculate(stu,n);
8 o A5 r: r8 _; e5 H5 Q - break;
7 @( ~+ g4 G$ _4 s" t/ `; `) C* e - case 7:) u" F$ i4 |# M" p* S! U) T9 [
- printf("7.读取文件内容!\n");3 n( Z3 h& ^: a
- Read(stu,&n);. @+ d `7 c# C3 e" C
- break;
9 B |) Z2 f3 n5 |5 Q - case 8:
( A( _3 J* Q- B. ^' E8 Q2 V - printf("8.保存文件!\n");
e7 B# U ?" A! d0 {0 j/ t - Write(stu,n);
) S$ R" o: d4 ?1 u; `! X+ @ - break;
/ g: @% w* f1 h! b; E - }
6 a* L8 U1 O$ x5 N0 { - }2 D2 i6 {8 _% }& L+ Y; D J
- }while(choice!=0);
7 }# [5 L& q8 e# x; A6 ^0 ? - return 0;2 P: W, a, l8 C: Q; _! a
- }
9 b. n# {% J9 y9 |* {3 [! |% S. g
复制代码 |
|