學生信息管理C語言
⑴ c語言編寫學生信息管理系統
/*好吧,其實你可以上網看看,那麼多的,你可以自己修改下*/
#include <stdio.h>
#include <malloc.h>
#include <string.h>
#include <stdlib.h>
#define NULL 0
#define LEN sizeof(struct student)
struct student
{
char name[20];
long int num;
char sex[4];
int age;
char address[30];
double tele_num;
char aihao[20];
struct student *next;
};//定義一個結構題
int TOTAL_NUM = 0;//學生總數
struct student *head = NULL;
void welcome (); //歡迎界面
void mainmenu (); //主界面
void record (); //記錄數據
void insert(struct student *stu); //插入數據
void display(struct student *stu); //顯示一個學生的信息
void displayAll (); //顯示所有學生的信息
void query_by_num (); //按學號查詢學生信息
void readData (); //讀取文件里學生的信息
void writeData (); //向文件寫入學生信息
void freeAll (); //清空鏈表內容
void del (); //刪除學生信息
void change (); //更改學生信息
void devise (struct student *p); //選擇更改內容
int main (void)
{
welcome ();
//顯示主菜單
mainmenu ();
return 0;
}
//顯示歡迎信息
void welcome ()
{
printf ("+----------------------------------------------------+\n");
printf ("| |\n");
printf ("| 歡迎使用網路工程學院信息安全092班學生信息管理系統 |\n");
printf ("| |\n");
printf ("+----------------------------------------------------+\n");
}
//系統主菜單
void mainmenu ()
{
int choice;
choice = -1;
readData ();
printf ("\n溫馨提示:為保證您的操作得到保存,請按正常順序退出系統^_^\n");
do
{
printf ("\n\n\n");
printf ("\t\t\t--------------------------------------------\n");
printf ("\t\t\t+ 信息安全092班學生信息管理系統 |\n");
printf ("\t\t\t--------------------------------------------\n");
printf ("\t\t\t+ [1]----錄入學生信息 |\n");
printf ("\t\t\t+ [2]----瀏覽學生信息 |\n");
printf ("\t\t\t+ [3]----查詢學生信息 |\n");
printf ("\t\t\t+ [4]----刪除學生信息 |\n");
printf ("\t\t\t+ [5]----修改學生信息 |\n");
printf ("\t\t\t+ [0]----退出系統 |\n");
printf ("\t\t\t+*·*·*·*·*·*·*·*·*·*·*·*·*·*·*|\n");
printf ("\t\t\t--------------------------------------------\n");
printf ("請輸入您的選擇:");
scanf ("%d", &choice);
switch (choice)
{
case 0:
writeData ();
freeAll ();
exit (0);
case 1:
record ();
break;
case 2:
displayAll ();
break;
case 3:
query_by_num ();
break;
case 4:
del ();
break;
case 5:
change ();
break;
default:
printf ("\n無效選項!");
break;
}
}
while (choice != 0);
}
//錄入學生信息
void record ()
{
struct student *p0;
p0 = (struct student *)malloc(LEN);
printf ("請輸入學生的姓名:");
scanf ("%s",p0->name);
printf ("請輸入學生的學號:");
scanf ("%ld",&p0->num);
printf ("請輸入學生的性別:");
scanf ("%s",p0->sex);
printf ("請輸入學生的年齡:");
scanf ("%d",&p0->age);
printf ("請輸入學生的地址:");
scanf ("%s",p0->address);
printf ("請輸入學生的電話:");
scanf ("%lf",&p0->tele_num);
printf ("請輸入學生的愛好:");
scanf ("%s",p0->aihao);
insert (p0);
printf ("該學生的信息為:\n");
printf ("-------------------------------------------------------------------------------\n");
printf ("姓名\t學號\t\t年齡\t性別\t地址\t\t電話\t\t愛好\n");
display (p0);
}
void insert (struct student *stu)
{
struct student *p0, *p1, *p2;
p1 = head;
p0 = stu;
if (head == NULL)
{
head = p0;
p0->next = NULL;
}
else
{
while ((p0->num > p1->num)&&(p1->next != NULL))
{
p2 = p1;
p1 = p1->next;
}
if (p0->num <= p1->num)
{
if (head == p1)
head = p0;
else
p2->next = p0;
p0->next = p1;
}
else
{
p1->next = p0;
p0->next = NULL;
}
}
TOTAL_NUM++;
}
void display (struct student *p)
{
printf ("%s\t%ld\t%d\t%s\t%s\t\t%.0f\t%s\n", p->name, p->num, p->age, p->sex, p->address, p->tele_num, p->aihao);
}
//瀏覽學生信息
void displayAll()
{
struct student *p;
printf("學生總數:%d\n", TOTAL_NUM);
p = head;
if (head != NULL)
{
printf("\n姓名\t學號\t\t年齡\t性別\t地址\t\t電話\t\t愛好\n");
printf("-------------------------------------------------------------------------------\n");
do
{
display(p);
p = p->next;
}
while(p != NULL);
}
printf ("\n");
}
//按學號查詢學生信息
void query_by_num ()
{
int num;
struct student *p1;
printf("請輸入學生的學號:");
scanf("%ld", &num);
if(head==NULL)
{
printf("無學生記錄!\n");
return;
}
p1 = head;
while (num!=p1->num && p1->next!=NULL)
p1 = p1->next;
if (num == p1->num)
{
printf ("姓名\t學號\t\t年齡\t性別\t地址\t\t電話\t\t愛好\n");
printf ("-------------------------------------------------------------------------------\n");
display (p1);
}
else
printf ("沒有該學生記錄,請核對!");
}
//寫入文件
void writeData ()
{
FILE* fp;//文件指針
struct student *p;
fp = fopen("1.txt", "w");
if (!fp)
{
printf("文件打開錯誤!");
return;
}
fprintf(fp,"%d\n", TOTAL_NUM);
for(p = head; p!= NULL; p= p->next)
{
fprintf(fp,"%s\t%ld\t%s\t%d\t%s\t%.0f\t%s\n", p->name, p->num, p->sex, p->age, p->address, p->tele_num, p->aihao);
}
fclose (fp);
}
void freeAll ()
{
struct student *p1, *p2;
p1 = p2=head;
while(p1)
{
p2=p1->next;
free (p1);
p1 = p2;
}
}
//讀取文件
void readData ()
{
FILE* fp;//文件指針
struct student *p1, *p2;
fp = fopen("1.txt", "r");
if (!fp)
{
printf("文件打開錯誤!");
return;
}
fscanf(fp,"%d\n", &TOTAL_NUM);
head = p1 = p2 = (struct student *)malloc(LEN);
fscanf(fp,"%s\t%ld\t%s\t%d\t%s\t%lf\t%s\n", p1->name, &p1->num, p1->sex, &p1->age, p1->address, &p1->tele_num, p1->aihao);
while(!feof(fp))
{
p1 = (struct student *)malloc(LEN);
fscanf(fp,"%s\t%ld\t%s\t%d\t%s\t%lf\t%s\n", p1->name, &p1->num, p1->sex, &p1->age, p1->address, &p1->tele_num, p1->aihao);
p2->next = p1;
p2 = p1;
}
p2->next = NULL;
fclose(fp);
}
//刪除學生信息
void del ()
{
struct student *p1, *p2;
long int num;
if (head == NULL)
{
printf("無學生記錄!\n");
return;
}
printf("請輸入您要刪除的學生的學號:");
scanf("%ld", &num);
p1 = head;
while (num != p1->num && p1->next != NULL)
{
p2 = p1;
p1 = p1->next;
}
if(num == p1->num)
{
if(p1 == head)
head = p1->next;
else p2->next = p1->next;
free(p1);
TOTAL_NUM--;
}
else
printf("沒有該學生記錄,請核對!\n");
}
//修改學生信息
void change ()
{
struct student *p1, *p2;
long int num;
if (head == NULL)
{
printf ("無學生記錄!\n");
return;
}
printf ("請輸入您要修改的學生的學號:");
scanf ("%ld", &num);
p1 = head;
while (num != p1->num && p1->next != NULL)
{
p2 = p1;
p1 = p1->next;
}
if(num == p1->num)
devise (p1);
else
printf("沒有該學生記錄,請核對!\n");
}
void devise (struct student *p)
{
int choice;
choice = -1;
do
{
printf("請選擇您要修改的學生的信息內容:\n");
printf("+----------------------+\n");
printf("| 姓名 請按 1 |\n");
printf("| 學號 請按 2 |\n");
printf("| 性別 請按 3 |\n");
printf("| 年齡 請按 4 |\n");
printf("| 地址 請按 5 |\n");
printf("| 電話 請按 6 |\n");
printf("| 愛好 請按 7 |\n");
printf("| 取消 請按 0 |\n");
printf("+----------------------+\n");
printf("請輸入您的選擇:");
scanf("%d", &choice);
switch (choice)
{
case 0:
return;
case 1:
printf("請輸入新姓名:");
scanf("%s", p->name);
break;
case 2:
printf("請輸入新學號:");
scanf("%d", &p->num);
break;
case 3:
printf("請輸入新性別:");
scanf("%s", p->sex);
break;
case 4:
printf("請輸入新年齡:");
scanf("%s", &p->age);
break;
case 5:
printf("請輸入新地址:");
scanf("%s", p->address);
break;
case 6:
printf("請輸入新電話:");
scanf("%lf", &p->tele_num);
break;
case 7:
printf("請輸入新愛好:");
scanf("%s", p->aihao);
break;
default:
printf("\n無效選項!");
break;
}
}
while(choice != 0);
}
⑵ 學生信息管理系統c語言程序
我給你做的是20個人的,至於科目數,你加一下就夠了
#include<stdio.h>
#include<string.h>
#define
N
20//定義學生的個數
struct
student//學生的結構體
{
int
num;
char
name[8];
int
yuwen;
int
shuxue;
int
yingyu;
int
wuli;
}st[N];
void
main()
{
struct
student
t;
//用於後面做冒泡排序時的中間變數
printf("輸入%d名學生的相關信息:\n",N);
//N是你在前面用宏定義的
//你要輸入幾個學生的信息改變N值就可以了
printf("**************************************************\n");
printf("學號
姓名
語文
數學
英語
物理\n");
for(int
i=0;i<N;i++)
scanf("%d%s%d%d%d%d",&st[i].num,st[i].name,&st[i].yuwen,&st[i].shuxue,&st[i].yingyu,&st[i].wuli);
printf("**************************************************\n");
printf("學號
姓名
平均分\n");
double
avr[N];
for(i=0;i<N;i++)
{
avr[i]=(st[i].yuwen+st[i].shuxue+st[i].yingyu+st[i].wuli)/4.0;
printf("%d\t\t%s\t%.2lf",st[i].num,st[i].name,avr[i]);
//注意這里的.2lf是說保留兩位小數的格式描述符.2的意思是幾位小數位
printf("\n");
}
printf("輸入你要查詢學生的序號,是第幾個學生\n");
scanf("%d",&i);
printf("學號
姓名
語文
數學
英語
物理\n");
printf("%d\t\t%s
%d
%d
%d
%d\n",st[i-1].num,st[i-1].name,st[i-1].yuwen,st[i-1].shuxue,st[i-1].yingyu,st[i-1].wuli);
//這是用來選擇你要排序的種類的,注意是中文的輸入
printf("按照語文成績進行排序:\n");
printf("**************************************************\n");
//下面是冒泡排序
//例如按照語文成績排序
for(i=0;i<N-1;i++)
for(int
j=0;j<N-i-1;j++)
if(st[j].yuwen<=st[j+1].yuwen)
{
t=st[j];
st[j]=st[j+1];
st[j+1]=t;
}
printf("學號
姓名
語文
數學
英語
物理\n");
for(i=0;i<N;i++)
printf("%d\t\t%s
%d
%d
%d
%d\n",st[i].num,st[i].name,st[i].yuwen,st[i].shuxue,st[i].yingyu,st[i].wuli);
//不及格的人
printf("**************************************************\n");
//這里必須要在算品均成績,應為交換之後,順序變了
for(i=0;i<N;i++)
avr[i]=(st[i].yuwen+st[i].shuxue+st[i].yingyu+st[i].wuli)/4.0;
printf("不及格人名單如下:\n");
printf("學號
姓名
語文
數學
英語
物理\n");
for(i=0;i<N;i++)
if(avr[i]<60.0)
printf("%d\t\t%s
%d
%d
%d
%d\n",st[i].num,st[i].name,st[i].yuwen,st[i].shuxue,st[i].yingyu,st[i].wuli);
}