最近在复习 《数据结构》 线性表。今天耗费了整个下午加上晚上1个多小时的调整写出来一个小程序。诶,不得不感叹,代码什么的还是要经常写啊。
-------------------------------------------------------------
这个 《简易学生信息管理系统》 的功能如下:
1、能够输入、输出、删除、更新、排序信息;
2、学生的信息包括:姓名(10个字符)、ID(0~32767)、分数(0~150)
3、ID不允许重复(貌似忘记限制ID小于零的情况和分数超过范围了。 XP)
4、学生的人数上限是10个(额,这个可以多一点)
--------------------------------------------------------------
程序编译、运行的环境:
ubuntu 12.04.2LTS ; Linux 3.5.0-36-generic ; gcc version 4.6.3; Vi IMproved 7.3
//This program is about managing students' info. #include <stdio.h> #include <string.h> typedef struct{ char name[10]; int id; int score; }Info; void Menu(); int Add_Info(Info *stu); void Print(Info *stu); void Del(Info *stu ); void Sort(Info *stu); void Update(Info *stu ); void Menu_Quit(); int num=0; void main(){ Info stu[10]; int flag=1; char choise; Menu(); while(flag==1){ scanf (" %c",&choise); switch(choise){ case 'a': Add_Info(stu); Menu(); break; case 'd': Del(stu); Menu(); break; case 's': Sort(stu); Menu(); break; case 'u': Update(stu); Menu(); break; case 'p': Print(stu); Menu(); break; case 'q': flag=0; Menu_Quit(); break; default: printf ("Sry,input Error!Plz Input again:"); } } } void Menu(){ system("clear"); printf ("\n\n Practice\n\n"); printf ("==================================\n\n"); printf ("a.Add info d.Del info\n"); printf ("u.Update info p.Print info\n"); printf ("s.Sort q.Quit\n"); printf ("\n\n==================================\n"); printf ("\nPlease input your choise:___\b\b"); } int Add_Info(Info *stu){ printf ("You have choosed \"a\"!\n"); int i,j,numtmp=0,num1=0,num2=0; Print(stu); printf ("How many students:"); scanf ("%d",&numtmp); if (num>10 || numtmp>10){ printf ("Sry,Overflow!!Plz try another way!\n"); return 0; } if (num){ num1=num; num2=numtmp+num; } else{ num1=0; num2=numtmp; } for (i=num1;i<num2;i++){ getchar(); printf ("==============================\n"); printf ("Plz input the %dst's name:",i+1); gets(stu[i].name); printf ("Plz input the %dst's id:",i+1); scanf ("%d",&stu[i].id); //IDs CANNOT repeat if (num){ for (j=0;j<i;){ if (stu[j].id==stu[i].id){ printf ("Error!ID repeated!!Plz input again:"); scanf ("%d",&stu[i].id); j=0; } else j++; } } printf ("Plz input the %dst's score:",i+1); scanf ("%d",&stu[i].score); num++; } printf ("\nDone with the input!\n"); printf ("Here's the new Database:\n"); Print(stu); return 1; } void Print(Info *stu){ int i; printf ("\nThere're %d students' info in the database\n",num); printf ("Name ID Score\n"); printf ("===================\n"); for (i=0;i<num;i++){ printf ("%s%6d%9d\n",stu[i].name,stu[i].id,stu[i].score); } printf ("===================\n\n"); printf ("press ANY key to continue"); getchar(); getchar(); } void Del(Info *stu ){ int i,j,id,flag=0; printf ("You have choised \"d\"!\n"); Print(stu); printf ("Plz input the student's id that you want to delete:"); while (flag==0){ scanf ("%d",&id); for (i=0;i<num;i++){ if (stu[i].id==id){ printf ("Found the student!! Deleting Info, plz wait...\n"); for (j=i;j<num-1;j++){ strcpy(stu[j].name,stu[j+1].name); stu[j].id=stu[j+1].id; stu[j].score=stu[j+1].score; } flag=1; system("sleep 1"); } } if (flag==0) printf ("Wrong ID!Plz input again:"); } num--; printf ("\nDone with the delete!\n"); printf ("Here's the new Database:\n"); Print(stu); } void Update(Info *stu ){ int id,i,j,flag=0; printf ("You have choosed \"u\"! !\n"); Print(stu); printf ("Plz input the student's id that you want to update:"); while (flag==0){ scanf ("%d",&id); for (i=0;i<num;i++){ if (stu[i].id==id){ printf ("Found the student!!\n"); printf ("Plz input ID:%d's name:",id); getchar(); gets(stu[i].name); printf ("Plz input ID:%d's score:",id); scanf ("%d",&stu[i].score); flag=1; } } if (flag==0) printf ("Wrong ID!Plz input again:"); } printf ("\nDone with the update!\n"); printf ("Here's the new Database:\n"); Print(stu); } void Sort(Info *stu){ printf ("You have choosed \"s\"!\n"); Print (stu); printf ("Sort by 1.ID; 2.Score:"); int choise,flag=0,i,j; Info tmp; while(flag==0){ scanf ("%d",&choise); switch(choise){ case 1://id for (i=0;i<num-1;i++){ for (j=i+1;j<num;j++){ if (stu[i].id>stu[j].id){ strcpy(tmp.name,stu[i].name); tmp.id=stu[i].id; tmp.score=stu[i].score; strcpy(stu[i].name,stu[j].name); stu[i].id=stu[j].id; stu[i].score=stu[j].score; strcpy(stu[j].name,tmp.name); stu[j].id=tmp.id; stu[j].score=tmp.score; } } } Print(stu); flag=1; break; case 2://score for (i=0;i<num-1;i++){ for (j=i+1;j<num;j++){ if (stu[i].score<stu[j].score){ strcpy(tmp.name,stu[i].name); tmp.id=stu[i].id; tmp.score=stu[i].score; strcpy(stu[i].name,stu[j].name); stu[i].id=stu[j].id; stu[i].score=stu[j].score; strcpy(stu[j].name,tmp.name); stu[j].id=tmp.id; stu[j].score=tmp.score; } } } Print(stu); flag=1; break; default: printf ("Wrong Choise!Plz input again:"); } } } void Menu_Quit(){ printf ("\n\n##################################\n"); printf (" This is the END of this program!\n"); printf (" Thanks for trial! Good luck!\n"); printf ("##################################\n"); }心得:
这样的程序虽然才200多行,不过还是有点小复杂。写的时候得先把框架打好,需要些什么功能,构建什么样的函数;用一些什么样的变量;注意细节,代码多了,很容易出错,调试起来很麻烦,这个只能得多写多练才能提高。
总结:
诶,勉强能拼凑出相应的功能。至于什么样的算法、结构更加简单、快速;怎样优化内存的使用;如果数据是几千几万怎么弄等等,这样的问题,现在的我还解决不了。只能考以后的学习来慢慢弥补啦。