最近很多小伙伴私信喊我,有沒有【學(xué)生成績管理系統(tǒng)】的源碼呀?
of course!作為編程百寶箱,區(qū)區(qū)源碼只是我的冰山一角~
直接呈上代碼:
#define _CRT_SECURE_NO_DEPRECATE
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#include<windows.h>
struct stu{
int id[10]; //學(xué)號(hào)
char name[20]; //姓名
int score; //分?jǐn)?shù)
};
struct STU
{
//int data;
struct stu data;
struct STU*? next;
};
//創(chuàng)建結(jié)構(gòu)體表頭
struct STU* creatlist()//創(chuàng)建鏈表
{
struct STU* head = (struct STU*)malloc(sizeof(struct STU));
head->next = NULL;
return head;
}
//創(chuàng)建結(jié)點(diǎn)
struct STU* createNode(struct stu data)
{
struct STU* newNode = (struct STU*)malloc(sizeof(struct STU));
newNode->data = data;
newNode->next = NULL;
return newNode;
}
//插入結(jié)點(diǎn)
void insertNodeByhead(struct STU* head, struct stu data)
{
struct STU* newNode = createNode(data);
newNode->data = data;
head->next = newNode;
}
//指定位置刪除
void deleteNode(struct STU* head, char* name)
{
struct STU* posNode = head->next;
struct STU* posFrontNode = head;
if (posNode == NULL)
{
printf("數(shù)據(jù)為空,無法刪除!\n");
return;
}
while (strcmp(posNode->data.name, name))
{
posFrontNode = posNode;
posNode = posFrontNode->next;
if (posNode == NULL)
{
printf("未找到指定位置,無法刪除!\n");
return;
}
}
posFrontNode->next = posNode->next;
free(posNode);
}
//查找
struct STU* searchData(struct STU* head, char *name)
{
struct STU* p = head->next;
if (p == NULL)
return NULL;
while (strcmp(p->data.name, name))
{
p = p->next;
}
return p;
}
//文件讀操作
void readFile(struct STU* head, char *fileName)
{
FILE *fp;
struct stu data;
fp = fopen(fileName, "r");
if (fp == NULL)
{
fp = fopen(fileName, "w+");
}
while (fscanf(fp, "%d\t%s\t%d\n", &data.id, data.name, &data.score) != EOF)
{
insertNodeByhead(head, data);
}
fclose(fp);
}
//文件寫操作
void writeFile(struct STU* head, char *FileName)
{
FILE? *fp;
fp = fopen(FileName, "w");
struct STU* p = head->next;
while (p)
{
fprintf(fp, "%d\t%s\t%d\n", p->data.id, p->data.name, p->data.score);
p = p->next;
}
fclose(fp);
}
//打印鏈表
void printlist(struct STU* head)
{
struct STU* p = head->next;
printf("學(xué)號(hào)\t姓名\t分?jǐn)?shù)\n");
while (p)
{
printf("%d\t%s\t%d\n", p->data.id, p->data.name, p->data.score);
p = p->next;
}
printf("\n");
}
void menu()
{
system("cls");//清屏
system("color b");//修改字體顏色
printf("\n\n\n\n");
printf("\t************************************\n");
printf("\t|? ? 歡迎來到學(xué)生信息管理系統(tǒng)? ? |\n");
printf("\t|**********************************|\n");
printf("\t|**? ? ? ? 1:錄入學(xué)生信息? ? ? ? **|\n");
printf("\t|**? ? ? ? 2:顯示學(xué)生信息? ? ? ? **|\n");
printf("\t|**? ? ? ? 3:增加學(xué)生信息? ? ? ? **|\n");
printf("\t|**? ? ? ? 4:刪除學(xué)生信息? ? ? ? **|\n");
printf("\t|**? ? ? ? 5:查詢學(xué)生信息? ? ? ? **|\n");
printf("\t|**? ? ? ? 6:修改學(xué)生信息? ? ? ? **|\n");
printf("\t|**? ? ? ? 7:退出學(xué)生系統(tǒng)? ? ? ? **|\n");
printf("\t************************************\n");
printf("\n? \t請(qǐng)輸入您要進(jìn)行的操作(1~~7):");
}
struct STU* List = creatlist();
void? keydown()
{
int n = 0;
struct stu data;
struct STU*p = NULL;
scanf("%d", &n);
switch (n)
{
//增加一個(gè)學(xué)生信息
case 1:
printf("******錄入學(xué)生信息******\n");
printf("請(qǐng)輸入你要添加的學(xué)生學(xué)號(hào),姓名,分?jǐn)?shù):");
fflush(stdin);//清空緩沖區(qū)
scanf("%d\t%s\t%d\n", &data.id, data.name, &data.score);
insertNodeByhead(List, data);
break;
case 2:
printf("******顯示學(xué)生信息******\n");
printlist(List);
break;
case 3:
printf("******增加學(xué)生信息******\n");
printf("請(qǐng)輸入你要添加的學(xué)生學(xué)號(hào),姓名,分?jǐn)?shù):");
fflush(stdin);//清空緩沖區(qū)
scanf("%d\t%s\t%d\n", &data.id, data.name, &data.score);
insertNodeByhead(List, data);
break;
case 4:
printf("******刪除學(xué)生信息******\n");
printf("請(qǐng)輸刪除的學(xué)生姓名:");
scanf("%s", data.name);
deleteNode(List, data.name);
break;
case 5:
printf("******查詢學(xué)生信息******\n");
printf("請(qǐng)輸入要查找的學(xué)生姓名:");
scanf("%s", data.name);
p = searchData(List, data.name);
if (p == NULL)
{
printf("未找到相關(guān)信息,無法刪除!\n");
system("pause");
}
else
{
printf("學(xué)號(hào)\t姓名\t分?jǐn)?shù)\n");
printf("%d\t%s\t%d\n", p->data.id, p->data.name, p->data.score);
}
break;
case 6:
printf("******修改學(xué)生信息******\n");
printf("請(qǐng)輸入要修改的學(xué)生姓名:");
scanf("%s", data.name);
break;
case 7:
printf("已經(jīng)安安全退出!");
system("pause");//防止閃屏
exit(7);
break;
default:
printf("輸入有誤,請(qǐng)重新入!");
system("pause");//防止閃屏
break;
}
writeFile(List, "1.txt");
}
int main()
{
readFile(List, "1.txt");
while (1)
{
menu();
keydown();
}
return 0;
}
文章福利:
還有其他源碼哦!
如果你想要更多資料!
可以來我專欄的C語言/C++編程學(xué)習(xí)交流俱樂部!
有(源碼,零基礎(chǔ)教程,項(xiàng)目實(shí)戰(zhàn)教學(xué)視頻)【點(diǎn)擊領(lǐng)取】
你想要的我都有,不想要的我也有!
